二级C的题

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:26:33
#include "stdio.h"
#include"string.h"
main()
{char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r);
stracat(p,q);
printf("%d%d\n",sizeof(p),strlen(p));
}

答案是20 11,不知道是怎么来的可以告诉下是怎么算的么?感激不尽啊~

数组p[20]占20个字节空间,所以sizeof(p)等于20

strcpy(p+strlen(q),r);其实就是把r字符串拷贝到p+3的位置,所以经过此步,p就成了"abcabcde"
strcat(p,q);是把q接到p的后面,所以p就成了"abcabcdeabc",所以数数就知道了,长度是11

首先sizeof(p)是求p字符数组的长度,这是由开始定义这个数组确定的,这里是20
strlen(p),是p字符数组定义的字符串长度,strlen(q)=3,所以strcpy(p+strlen(q),r);后,从p+3开始把r[]="abcde"拷贝在后面,即p[]="abcabcde";stracat(p,q)是把q[]="abc"接在p后面所以p[]="abcabcdeabc",所以strlen(p)=11

第一个20没什么好说的了,定义20字节的数组起字节数当然是20啦,至于11,strcpy(p+strlen(q),r);使p指向的字符串变为“abcabcde”,然后再有stracat(p,q);就变成了“abcabcdeabc”,不就是11了么~