这题有些错误
#include "stdio.h"
#include
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));
}
strcat涵数的作用连接两个字符数组中的字符串,字符数组r接到p的后面
p此时abcdabcde\0\0\0\0\0\0\0\0\0\0\0
strcpy(p+strlen(q), q); strlen(q)测试q的实际长度为3 p+strlen(9)等价于p+3即数组指针也就是指向p[3]的地址,然后把q中的abe从p[3]这地址开始复制得到abcabc\0\0\0\0\0\0\0\0\0\0\0\0\0\0
所以strlen(p)最后为6
选B
分析:
strcat(p, r); =》这时候字符数组p[20]="abcdabcde";
strcpy(p+strlen(q), q); =>q[]="abc", strlen(q)= 3,不计算'\0';
strcpy(p+strlen(q), q)=>把字符数组r所有元素复制到字符数组p下标为3开始位置,并且字符数组r的结束符算'\0'也一起复制,字符数组p[20]="abcabc";strlen(p)不计算'\0'在内所有字符长度,故strlen(p)为6
B
看下面的图:
关键是strcpy把'\0',也赋值过去了,而strlen只查到'\0'处。