读书人

高手帮小弟我解决下

发布时间: 2012-03-03 15:33:03 作者: rapoo

高手帮我解决下
#include <stdio.h>
#include <ctype.h>

void main()
{
char* str = "1234" ;
char a[] = {'1' , '2' , '3' , '4'};
printf("str strlen:%d sizeof:%d\n",strlen(str) , sizeof(str));
printf("a strlen:%d sizeof:%d\n",strlen(a) , sizeof(a));
}

运行结果:

str strlen:4 sizeof:4
a strlen:7 sizeof:4
请按任意键继续. . .



#include <stdio.h>
#include <ctype.h>

void main()
{
char* str = "1234" ;
char a[] = "1234";
printf("str strlen:%d sizeof:%d\n",strlen(str) , sizeof(str));
printf("a strlen:%d sizeof:%d\n",strlen(a) , sizeof(a));
}
运行结果:
str strlen:4 sizeof:4
a strlen:4 sizeof:5
请按任意键继续. . .



他们的运行结果为什么会不同,特别是第一个的strlen(a)的返回值还是7 ,这是为什么?


[解决办法]
char a[] = "1234";最后有一个'\0'表示字符串结束,所以储存空间是5,字符串长度是4。
char a[] = {'1', '2', '3', '4'};后面没有'\0',所以储存空间是4,字符串长度未知,在其储存空间后面找到'\0'为止。
[解决办法]
同意cnzdgs
关键就是一个:字符串结束符'\0'标志着字符串的结束
[解决办法]
弄清楚数组,字符串,指针这些基本概念和关系吧
还有常用的EDF,0,'0','\O','\n'呵呵

读书人网 >C语言

热点推荐