字符数组疑惑

didijiji 2011-09-29 10:09:15
我写了一个测试程序:

#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是怎么得来的。
...全文
206 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
didijiji 2013-04-16
  • 打赏
  • 举报
回复
#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));
}
clannadgirl 2011-09-29
  • 打赏
  • 举报
回复
没终止符,后面加个'0'就行了
席喜思 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pathuang68 的回复:]

引用 1 楼 bdmh 的回复:

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


++

一语中的,PF
[/Quote]

++2
疯魔症 2011-09-29
  • 打赏
  • 举报
回复
随机值,
chos2006 2011-09-29
  • 打赏
  • 举报
回复
char r[] = {'a','b','c','d','e','f','g', '\0'};
pathuang68 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

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

++

一语中的,PF
火头军 2011-09-29
  • 打赏
  • 举报
回复
以" "定义的字符串 编译器会自动给你加一个结尾标记的 '\0',但是char r[] = {'a','b','c','d','e','f','g'};这种不会加上的,strlen是以'\0'判断结尾的。所以strlen(r)多少都有可能
acdbxzyw 2011-09-29
  • 打赏
  • 举报
回复
15是随机值,使用strlen()时一定要确保字符串末尾有一个'\0'。加上'\0'就正确了。
counsellor 2011-09-29
  • 打赏
  • 举报
回复
strlen是计算到'\0'吧,char[]这个东西你初始化的不是字符串,所以结果未知。
bdmh 2011-09-29
  • 打赏
  • 举报
回复
r没有结束符标记,所以任何值都是有可能的,还有可能溢出,最后一个字符要为0

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧