C语言中SIZEOF和STRLEN的问题
chara[5]="ABC":strlen(a)=3sizeof(a)=5这俩对么如果对的话请看下面的chara[]="AB";strlen(a)=2这个没错sizeof...
char a[5]="ABC" :
strlen(a)= 3
sizeof(a)= 5
这俩对么 如果对的话 请看下面的
char a[ ]="AB";
strlen(a) = 2 这个没错
sizeof(a) = ? 这个是多少? 答案居然是3 为什么我觉得是 4 展开
strlen(a)= 3
sizeof(a)= 5
这俩对么 如果对的话 请看下面的
char a[ ]="AB";
strlen(a) = 2 这个没错
sizeof(a) = ? 这个是多少? 答案居然是3 为什么我觉得是 4 展开
展开全部
strlen是测试字符串长度的函数,测试的值为字符串中的实际长度(不包括'\0')。
sizeof的作用就是返回一个对象或者类型所占的内存字节数。一个字符占一个字节,A、B各占一个,还有一个'\0',所以是3。
至于这个为什么是五,因为赋给字符数组的初值如果个数小于数组的长度,其余未赋值的元素自动定为空字符即'\0'
sizeof的作用就是返回一个对象或者类型所占的内存字节数。一个字符占一个字节,A、B各占一个,还有一个'\0',所以是3。
至于这个为什么是五,因为赋给字符数组的初值如果个数小于数组的长度,其余未赋值的元素自动定为空字符即'\0'
追问
也就是说和类型 char一点关系都没有 sizeof主要看数组下标是吗
追答
sizeof测试的只是一个对象所占的空间(字节),与这个对象具体的数据类型有关。不同数据类型的数据所占的字节数是不一样的。
char a[5]="ABC"的状态: a[0] a[1] a[2] a[3] a[4]
A B C \0 \0
所以用strlen返回的值是3,sizeof的是5
char a[]="AB"的状态: a[0] a[1] a[2]
A B \0(在输入字符串时,系统会自动加上\0)
所以用strlen返回的值是2,sizeof的是3
展开全部
2个意义不一样的。
strlen 是函数。参数为 chan*, 专门针对字符串的。
sizeof 是运算符,不是函数,可以这样写sizeof a, 等等。
strlen求字符串的长度,不含字符串结束标志。因此strlen(a) == 3
sizeof求的是编译器为数组放分配的空间大小,一旦 char a[5] 定义了,则就会分配5个字节的空间。
strlen 是函数。参数为 chan*, 专门针对字符串的。
sizeof 是运算符,不是函数,可以这样写sizeof a, 等等。
strlen求字符串的长度,不含字符串结束标志。因此strlen(a) == 3
sizeof求的是编译器为数组放分配的空间大小,一旦 char a[5] 定义了,则就会分配5个字节的空间。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主以后请别要用char a[5]="ABC"这种用法。
因为基本没人这么用。当然这确实是给字符数组赋初值的最快方法。
好的 你的认为4其实是不对的。
上面的char a[]="AB"不显示声明下标,那么编译器会根据需要取最小的需求满足。
字符串"AB"在内存中的表示是 A的ascii码 B的ascii码 \0
因为C/C++以\0为字符串的结束符,所以\0是隐式的字符
那么这里编译器就把a自动声明成3个下标的数组了
char a[ ]="AB";
和
char a[3]="AB";
等效
char a[2]="AB";就是错误的,因为放不下
char a[4]="AB";就会最后一个下标的位置没有数据,浪费了。
那一个数组的下标是3,sizeof自然是3啦
因为基本没人这么用。当然这确实是给字符数组赋初值的最快方法。
好的 你的认为4其实是不对的。
上面的char a[]="AB"不显示声明下标,那么编译器会根据需要取最小的需求满足。
字符串"AB"在内存中的表示是 A的ascii码 B的ascii码 \0
因为C/C++以\0为字符串的结束符,所以\0是隐式的字符
那么这里编译器就把a自动声明成3个下标的数组了
char a[ ]="AB";
和
char a[3]="AB";
等效
char a[2]="AB";就是错误的,因为放不下
char a[4]="AB";就会最后一个下标的位置没有数据,浪费了。
那一个数组的下标是3,sizeof自然是3啦
追问
哦 和类型没关系是吧就是char
追答
哦?char占一个字符啊。。。你问得再清楚点?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sizeof(数组名),得到的是这个数组所占的字节数。
char a[ ]="AB"; 这样的赋值方法,使得数组的大小就是字符串的大小;而”AB“是一个字符串,字符串是以'\0'结尾的,所以这个字符串有3个字符,也就是说,数组a有3个字节的大小,所以是3了。
char a[ ]="AB"; 这样的赋值方法,使得数组的大小就是字符串的大小;而”AB“是一个字符串,字符串是以'\0'结尾的,所以这个字符串有3个字符,也就是说,数组a有3个字节的大小,所以是3了。
追问
但是第一个里面的为什么是5啊? char不是也算1个字节么
追答
第一个是自己已经定义了数组占的内存空间是5个字节:
char a[5]="ABC" :
第二个没有指定数组大小,系统会根据实际需要分配内存空间:
char a[ ]="AB";
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
基础太不扎实了!a[5]是数组好不好?sizeof(a)当然= 5,strlen(a)= 3不用解释了吧~char a[ ]="AB";
没有定义数组长度,系统会根据实际赋值的数组大小来确定!当然就有sizeof(a)=2了
没有定义数组长度,系统会根据实际赋值的数组大小来确定!当然就有sizeof(a)=2了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strlen(a)是求的该数组的元素个数所以当a[ ]="AB"时,strlen(a)的结果是2;sizeof(a)是求数组占的空间的,当a[ ]="AB"时,它实际的空间就是3,因为最后还有自带的一个结束符,也占用一个空间。比如a[]="asdf",那么sizeof(a)的结果就是5而不是4。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询