#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而已。数组大小跟字符串长度不是一回事的。
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个字符。
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个字符。