33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <string.h>
void main(){
char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
// 操作完成后。数组p为 abcdabcde\0
strcat(p,r);
// 操作完成后。数组p为 abcadc\0。注意:数组p申请了20个字节的内存。这段内存的内存此时为 abcadc\0de\0
strcpy(p+strlen(q),q);
// 这步并不会越界!!!!!strlen(p)的长度为6。所以指向的内容为p偏移6个字节,其实就是\0。
printf("%d\n",p+strlen(p));
// 如果加上这一条。输出的内容为de。因为指向的是p偏移7个地址,从d开始输出,直到遇到\0。
// 因此,也可以验证,上面说的一切。
printf("%s\n",p+strlen(p) + 1);
return 0;
}
strcat(p, r);//此时p的内容是"abcdabcde\0"
strcpy(p + strlen(q), q);//此时p的值是abcabc\0de
printf("%d\n", p + strlen(p));//输出p的地址再偏移6个字节的地址
printf("%d\n", *p);//显示p指向的内容,而不是p的地址
#define _CRT_SECURE_NO_WARNINGS
int i;
for (i = 0; i < 20; i++)
{
printf("%d %d\n", p + i, *(p + i));
}
加上这个打印,楼主你一定就能理解了