博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C语言】size与strlen的区别解析
阅读量:2489 次
发布时间:2019-05-11

本文共 1470 字,大约阅读时间需要 4 分钟。

一.sizeof

    sizeof(...)是运算符参数可以是数组,指针,类型,对象,函数等。

    它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。

    sizeof 返回的值表示的含义如下:

    数组 -编译时分配的数组空间大小;

    指针 - 存储该指针所用的空间大小(存储该指针的地址的长度,是长整型应该为4 );

    类型 -该类型所占的空间大小;

    对象 -对象的实际占用空间大小;

    函数 - 函数的返回类型所占的空间大小。函数的返回类型不能是void

二.strlen

    strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char * )。当数组名为参数传入时,实际上数组就会退化成指针了。

    它的功能是:返回字符串的长度该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符 NULL 。返回的长度大小不包括NULL

   大部分编译程序在编译的时候就把的的的sizeof  计算过了的英文类型或是变量的长度这就是的的的sizeof(X)可以用来定义数组维数的原因 

举几个例子:

char str [20] =“0123456789”;

int a = strlen(str); / * A = 10; strlen的计算字符串的长度,以\ 0' 为字符串结束标记。

Int b = sizeof(str); / * B = 20;的sizeof 计算的则是分配的数组STR [20] 所占的内存空间的大小,不受里面存                                         储的内容影响

char * str1 =“absde”;

char str2 [] =“absde”;

char str3 [8] = {'a',};

char ss [] =“0123456789”;

输出:

sizeof(str1)= 4;

sizeof(str2)= 6;

sizeof(str3)= 8;

sizeof(SS)= 11;

      首先说明一点,
char
类型占一个字节,所以
sizeof(char)
1
,这点要理解

str1 是一个指针,只是指向了字符串“absde” 而已。所以的的sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个字符型指针占的空间。所以的的sizeof(str1 )= sizeof(char *)= 4 ,在C / C ++ 中一个指针占4 个字节

    str2 是一个字符型数组.C / C ++ 规定,对于一个数组,这个报道查看数组占位的总空间,所以的的的sizeof(STR2)取得的是字符串“absde” 占的总空间。“absde” 中,共有absde \ 0 六个字符,所以STR2 数组的长度的英文6 ,所以的sizeof(STR2)= 6 *的sizeof(char)的= 6

    str3 已经定义成了长度是8 的数组,所以的的的的sizeof(STR3)8

    str4 str2 类似,' 0''1 '...'9' 加上'\ 0' 11 个字符,所以ss 占的空间是 11

    总之,对于指针, sizeof 操作符返回这个指针占的空间,一般是4 个字节;而对于一个数组,sizeof 返回这个数组所有元素占的总空间。char * char [] 容易混淆,一定要分清,而且字符* = “AAA” 的写法现在不被提倡,应予以避免

    而 strlen的不区分是数组还是指针,就读到\ 0 为止返回长度。而且strlen的是不把\ 0 计入字符串的长度的

转载地址:http://hlxrb.baihongyu.com/

你可能感兴趣的文章
HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面...
查看>>
面试的问题 及回答
查看>>
一、Oracle介绍
查看>>
:after伪类+content经典应用举例
查看>>
antd-react-mobile(踩坑记录)
查看>>
洛谷P1061 Jam的计数法
查看>>
拼图展示
查看>>
Jquery ajax 访问调用带参数的服务方法!
查看>>
1185 威佐夫游戏 V2
查看>>
【Lucene4.8教程之中的一个】使用Lucene4.8进行索引及搜索的基本操作
查看>>
python天蝎座-day1笔记
查看>>
Harbo1.5.2离线搭建
查看>>
1 vmware 如何联网,以及行命令令初步
查看>>
使用python的openpyxl模块操作excel
查看>>
Shiro安全框架入门篇
查看>>
插入排序的python实现
查看>>
有1~5000一组乱序数列,请使用伪代码对该数进行排列
查看>>
Windows如何安装MSMQ消息队列
查看>>
使用MapReduce将HDFS数据导入Mysql
查看>>
混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集...
查看>>