首页 > 试题广场 >

下列程序的输出结果是__________main(){ c

[单选题]
下列程序的输出结果是()
int main() {
    char p1[15]="abcd", *p2="ABCD", str[50]="xyz";
    strcpy(str + 2, strcat(p1+2, p2+1));
    printf("%s", str);
    return 0;
}


  • xyabcAB
  • abcABz
  • ABabcz
  • xycdBCD
转载 p1是个指针,是地址,+2就是该地址+2,该地址往后面2个的那个地址 strcat(p1+2,p2+1)的执行: p1=”abcd”,由于p1指向"abcd"的首地址'a'的地址,所以p1+2指向'c'的地址 p2=”ABCD”,由于p2指向"ABCD"的首地址'A'的地址,所以p2+1指向'B'的地址 所以strcat(p1+2,p2+1)也就是将"cd"和"BCD"进行字符串拼接, 得到"cdBCD" 再执行strcpy(str+2,"cdBCD") str[50]=”xyz”,由于str指向"xyz"的首地址'x'的地址,所以str+2指向'z'的地址 所以,strcpy(str+2,"cdBCD")也就是将"z"用"cdBCD"进行字符串拷贝,拷贝后,原有的以'z'为起始的空间被"cdBCD"覆盖,而前面的"xy"不受影响 所以最后输出"xycdBCD"
发表于 2021-09-30 09:31:56 回复(4)
strcpy要覆盖,strcat不覆盖,只拼接
发表于 2023-01-06 15:55:57 回复(0)
cpy 后面的复制到前面 
cat 前面与后面连接
发表于 2021-01-24 21:40:07 回复(2)
cpy,保留前面的 cat,保留后面的
发表于 2021-01-17 19:51:24 回复(0)
前面为啥是xy呀?str+2不应该是z了嘛
发表于 2023-10-07 08:32:28 回复(1)
p1+2不应该指向第45位了嘛?数组➕数字不是加数组大小*数字嘛
发表于 2022-07-27 11:35:33 回复(1)
int main()
{
   char p1[15]="abcd",*p2=(char*)"ABCD",str[50]="xyz";
    strcpy(str+2,strcat(p1+2,p2+1));
printf("%s",str);
}

发表于 2020-08-19 18:45:06 回复(0)
有无大佬解释一下前面为什么是xy啊
发表于 2022-10-07 10:47:20 回复(3)
#include <stdio.h>
#include <cstring>

int main()
{
    char p1[15]="abcd",*p2=(char*)"ABCD",str[50]="xyz";
    strcpy(str+2,strcat(p1+2,p2+1));
    printf("%s",str);
}
发表于 2020-10-21 12:55:31 回复(0)