关于C语言字符串的问题、

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:02:13
#include <sting.h>
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));
}
程序运行后的输出结果是什么()
A)20 9 B)9 9 C)20 11 D)11 11
请问这道提谁能帮我详细分析一下啊??同时答案是多少呢?这些都怎么计算呢?

C

#include <sting.h>
main()
{ char p[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r); //strlen(q)=3,p+3处的字符是d,所以此操作会将d擦除,p指向的字符串为:abcabcde
strcat(p,q); //简单的字符连接 此时p指向:abcabcdeabc
printf("%d %d\n",sizeof(p),strlen(p)); //sizeof(p)为数组的大小20,strlen为字符串的长度,abcabcdeabc 长度为11 注意 不包括'\0'
}

C)20 11

sizeof(p) == 20 -- 因为声明 char p[20],所以有20个char, 也就是 20个bytes.

strcpy(p+strlen(q),r);
strlen(q) == 3,
p+strlen(q) r考入位置在p[3],变abcabcde
strcat(p,q); 后面再添q,变abcabcdeabc,字符串长度 11 个字符
所以 strlen(p) == 11

c
首先排除b和d
sizeof(p)在前面定义了.长度位20.
关键是这两句
strcpy(p+strlen(q),r); //把r的内容复制到p中
strcat(p,q); //在把q中的复制给p里