sizeof与strlen字符统计问题

C语言 码拜 9年前 (2015-10-20) 961次浏览
char str1[]=”\0318″asb”;

char str2[]={“”1″”,””\0″”,””2″”};

char str3[]=”1\02″;

char a[]=”a0\0a0\0″;

printf(“%d\n”,sizeof(str1));//10

printf(“%d\n”,strlen(str1));//9   ,为什么不是1?不是已经遇到\0了么?

printf(“%d\n”,sizeof(str2));//3    这个怎么是3,而不是4?   printf(“%d\n”,sizeof(“123”));结果是4

printf(“%d\n”,strlen(str2));//1   这个怎么就是1

printf(“%d\n”,sizeof(str3));//3 

printf(“%d\n”,strlen(str3));//2   //这个怎么就不是1了?

printf(“%d\n”,sizeof(a));//7    这个怎么是7

printf(“%d\n”,strlen(a));//2   这个遇到\0结束可以理解 

后面是输出的结果,麻烦大家给说说为什么数值是这样的。

解决方案:5分
sizeof是求的类型, strlen是求字符串长度

1 有两个\, 就算一个\0也要小心, 后面跟数字默认是八进制

2 str2是数组, “123”类型是const char *

3 第二个字节就是0

4 数组

5 \0后跟数字代表八进制

6 数组

解决方案:5分
“123” 类型是char[4] 不是char*

解决方案:5分
\ 表示 \ 本身 

所以 字符串是 【\ ,0 ,3,1,8,”,a,s,b】 这9个字符 \0 是一个字符。 值为 0

原因是已经 转义了一次了 这个 \ 不再能够转义别的字符了。

\02,是8进制转义字符 \02 =2 ,

转义字符 遇到数字要特别注意,,,遇到字母,有时候也要仔细考察

\a,\b 也都是转义字符

解决方案:5分
假如希望表达 abd\0 和 2xyz 连接而成的字符串

写成 “abcd\0″”2xyz”

这样两个 中间的引号会被忽略,原因是两个字符串字面值,连续写(中间有空格)代表他们的连接   

输出的时候是 abcd 

继续输出可以输出2xyz

解决方案:10分
本人小白,也来本人推算一下。看看结果对不对?高手们就不要拍了啊!
char str1[]=”\0318″asb”;

char str2[]={“”1″”,””\0″”,””2″”};

char str3[]=”1\02″;

char a[]=”a0\0a0\0″;

printf(“%d\n”,sizeof(str1));

//sizeof()是计算数组大小,这个代码内,数组存放应该是这样 \,0,3,1,8,”,a,s,b,\0;结果应为10;
printf(“%d\n”,strlen(str1));

//strlen()是计算字符串,但不会算\0,因此会是结果会是9
printf(“%d\n”,sizeof(str2));

//这个存放时是以字符形式存放的,后并没有0,因此它的结果应该是3.
 printf(“%d\n”,sizeof(“123”));

//这段代码,本人理解的不是很透说得不对的话,高手们可以指正一下,但不要光拍砖,不来干货,首先123是字符串,他会以字符串的形式存放在常量区,而这样交给sizeof(),这个字符串在常量区的首地址,所以说”123″加上\0,一共会有4个字符,这里会是,4
printf(“%d\n”,strlen(str2));

//这里就好理解了,strlen,遇到\0会给束,而字符数组内\0也就是第二个字符,就会结束,而且不计算\0,因此这里应该是1;
printf(“%d\n”,sizeof(str3)); //”1\02″;

//数组的存放模式应该是,1,\0,2, \0因此这里是3
printf(“%d\n”,strlen(str3));// “1\02”;

//这里原因是第二个字符是 \0,这里应该输出1
printf(“%d\n”,sizeof(a));// “a0\0a0\0”;

//字符串在内存中的存放 a,0,\0,a,0,\0,\0,应此这里应输出 7
printf(“%d\n”,strlen(a));// “a0\0a0\0”;

//第3个元素是\0,应此这里是2;


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明sizeof与strlen字符统计问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)