求答案,求解释!(主要是sizeof()的输出值)

#include<stdio.h>
#include<string.h>
void main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r);strcat(p,q);
printf("%d %d\n",sizeof(p),strlen(p));
}
一个字符占一个字节,为什么11个字符用了sizeof过后输出的长度是20啊?

因为你是这样定义的:
char p[20]
所以p的大小就是20字节。虽然你只给它前四个字节赋了值,但是它的大小还是不变的,后面都是0而已。数组大小跟字符串长度不是一回事的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-09

20,11

第2个回答  2010-09-09
输出: 20 11
strcpy(p+strlen(q), r);
这条语句是从字符数组p+3开始,即从'd'开始拷贝,把字符数组r中"abcde"拷贝过去,所以p 就变成"abcabcde"
strcat(p,q);
这条语句是把q中"abc"追加到q后边,所以q变成"abcabcdeabc"
sizeof(p) = 20因为不管里面字符多少,他就是一个字符数组,其大小为20
strlen(p)=11是计算有效字符长度,他是从字符开始,一直遇到'\0',就是ascii=0,就结束,而"abcabcdeabc"就有11个字符。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网