高分求C语言程序不明白~谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:11:52
#include<string.h>
main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcat(p,r);strcpy(p+strlen(q),q);
printf("%d\n",strlen(p));
}
补充:strcpy(p+strlen(q),q); 这句话是什么意识啊 ?没理解 谢谢了
结果是6; 为什么啊 谢谢

#include<string.h>
main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcat(p,r); p和r链接 p这时候是“abcdabcde"
strcpy(p+strlen(q),q); strlen(q)=3
p+3指向第一个”c“的职位 这时候再拷贝q p变成了 “abcabc”
printf("%d\n",strlen(p)); 长度当然是6了
}

//欢迎在线讨论
#include<stdio.h>
#include<string.h>
main()
{
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcat(p,r);//p:abcdabcde
strcpy(p+strlen(q),q);//p:abcabc 把q覆盖到p第strlen(q)位置
printf("%d\n",strlen(p)); //6
}

strlen(q)就是计算q的字符串长度,是3。
strcpy(p+strlen(q),q)就是把q拷贝到p+3的位置,拷贝完成会在后面加1个\0,也就是字符串结束符。这个符号在p+6的位置
最后的strlen(p)是计算字符串p的长度,这个函数找到\0就认为字符串结束了,所以strlen(p)的结果就是6……