首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符数组纳闷

2013-04-20 
字符数组疑惑我写了一个测试程序:#includestdio.h#includestring.hint main(){char *p abcdefgch

字符数组疑惑
我写了一个测试程序:

#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)多少都有可能

[解决办法]

引用:
r没有结束符标记,所以任何值都是有可能的,还有可能溢出,最后一个字符要为0


++

一语中的,PF
[解决办法]
char r[] = {'a','b','c','d','e','f','g', '\0'};
[解决办法]
随机值,
[解决办法]
没终止符,后面加个'0'就行了

热点排行