字符数组疑惑
我写了一个测试程序:
#include<stdio.h>
#include<string.h>
int main()
{
char *p = "abcdefg";
char q[] = "abcdefg";
char r[] = {'a','b','c','d','e','f','g'};
printf("%d",sizeof(p));
printf("%d\n",strlen(p));
printf("%d",sizeof(q));
printf("%d\n",strlen(q));
printf("%d",sizeof(r));
printf("%d\n",strlen(r));
}
在VC++ 6.0环境下输出结果为:
4 7
8 7
7 15
想不明白最后的一个15是怎么得来的。
[解决办法]
r没有结束符标记,所以任何值都是有可能的,还有可能溢出,最后一个字符要为0
[解决办法]
strlen是计算到'\0'吧,char[]这个东西你初始化的不是字符串,所以结果未知。
[解决办法]
15是随机值,使用strlen()时一定要确保字符串末尾有一个'\0'。加上'\0'就正确了。
[解决办法]
以" "定义的字符串 编译器会自动给你加一个结尾标记的 '\0',但是char r[] = {'a','b','c','d','e','f','g'};这种不会加上的,strlen是以'\0'判断结尾的。所以strlen(r)多少都有可能
[解决办法]
++
一语中的,PF
[解决办法]
char r[] = {'a','b','c','d','e','f','g', '\0'};
[解决办法]
随机值,
[解决办法]
没终止符,后面加个'0'就行了