首页 > 试题广场 >

下列程序的打印结果是?

[单选题]
下列程序的打印结果是?
char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz"; 
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);
  • xyabcAB
  • abcABz
  • ABabcz
  • xycdBCD
  • 运行出错
strcat(p1+2,p2+1); //返回以p1+2为首的字符串,即"cdBCD"
strcpy(str+2,strcat(p1+2,p2+1)); //将"cdBCD"copy到str+2位置上,并覆盖后面的内容,此时str为"xycdBCD"




编辑于 2016-08-18 23:44:31 回复(2)
char*  strcpy(char *dest,char *src);将从src开始包含'\0'的字符串拷贝到以dest开始的位置,进行覆盖
char*  strcat(char *dest,char *src);将src开始的字符串添加到dest字符串的末尾(覆盖dest的\0")
两者都返回指向dest的指针。

发表于 2017-08-06 15:37:04 回复(0)
strcat()字符串连接函数,strcpy()字符串复制函数
发表于 2016-08-19 22:11:57 回复(0)

1

strcpy(s1, s2);

复制字符串 s2 到字符串 s1。

2

strcat(s1, s2);

连接字符串 s2 到字符串 s1 的末尾。连接字符串也可以用 + 号,例如:

string str1 = "runoob";string str2 = "google";string str = str1 + str2;

3

strlen(s1);

返回字符串 s1 的长度。

4

strcmp(s1, s2);

如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;

如果 s1>s2 则返回值大于 0。

5

strchr(s1, ch);

返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。

6

strstr(s1, s2);

返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

发表于 2022-03-14 10:40:20 回复(0)
生产环境上谁要是敢写这种代码,信不信老板和同事把你的头给拧下来😡
发表于 2022-05-26 17:21:31 回复(1)
strcat(x,y)将x,y字符串连接。stracat(p1+2,p2+1)="cdBCD";
strcpy(str+2,strcat(p1+2,p2+1))将strcat(p1+2,p2+1)复制到str数组中,从str+2开始。
str="xycdBCD";
发表于 2016-12-04 15:19:41 回复(0)
难点在于strcat(p1, p2 + 1)) 作用是将p2+1连接到p1的后面,返回的是以p1开头的字符串
        strcat(p1+2, p2 + 1)) 作用是将p2+1连接到p1的后面,返回的是以p1+2开头的字符串


发表于 2018-06-07 17:05:16 回复(0)
str[50]= "xyz"; str代表str数组首地址,+2表示首地址偏移1个位置
而p2是常量指针,不可以被修改的。

发表于 2016-08-18 16:24:32 回复(3)
为啥我在vs上运行,结果报错了。
另外,strcat_s(char*src,const char*dest)  是dest粘贴到src后边,
例:char d[20]="GoldenGlobal"; 
        char *s="View";
         strcat(d,s);
         printf("%s",d); // 输出 d 为 GoldenGlobalView (中间无空格)
            那么 strcat(d+2,s); //输出不就是 GoldenGlobal View (中间多出两个空格吗?)在vs2012上直接就报错了
发表于 2016-10-27 20:07:24 回复(0)
char *p2 = "ABCD"; 能行?要不就把E去掉,你放个E在这是什么意思?
发表于 2022-04-01 23:33:33 回复(0)

p2指向字符串ABCD的首地址,p2+1代表地址向后移一位

即p2+1 <-> BCD

同理p1+2 <-> cd

char *strcat(char *dest, const char *src) ;把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

即strcat(p1 + 2, p2 + 1) <-> cdBCD

char * strcpy ( char * destination, const char * source );destination表示目标字符串的地址,source表示源字符串的地址。

即strcpy(str + 2, strcat(p1 + 2, p2 + 1));将cdBCD拷贝到数组str[3]-str[7]位置,结果也就是xycdBCD


发表于 2024-05-09 15:58:01 回复(0)
char *p2="ABCD";
字符串常量"ABCD"不能用来初始化字符指针变量
程序编译出错
发表于 2023-08-09 18:36:21 回复(0)

1.字符串的拷贝,覆盖
char*  strcpy(char *dest,char *src);将从src开始包含'\0'的字符串拷贝到以dest开始的位置,进行覆盖
2.字符串的连接  末尾进行连接
char*  strcat(char *dest,char *src);将src开始的字符串添加到dest字符串的末尾(覆盖dest的\0")
两者都返回指向dest的指针。


发表于 2022-03-20 14:26:14 回复(0)
strcat(p1+2,p2+1); //返回以p1+2为首的字符串,即"cdBCD" strcpy(str+2,strcat(p1+2,p2+1)); //将"cdBCD"copy到str+2位置上,并覆盖后面的内容,此时str为"xycdBCD"
发表于 2021-06-21 13:22:04 回复(0)

cat是直接后面接字符串,且返回位置变化。

copy在某个位置复制,返回位置不变。

发表于 2020-03-29 12:49:39 回复(0)
能解释一下为什么是xycdBCD,而不是xyabBCD吗?
发表于 2018-03-23 00:13:41 回复(0)
char str[50]= "xyz"; 这个定义都是错的,怎么运行???
发表于 2018-01-27 20:07:36 回复(0)
傻傻分不清地址开始的地方😭。
发表于 2017-08-28 12:57:22 回复(0)
%s 代表输出的是字符串。
Ascii码 十进制0代表的是空白字符
发表于 2017-08-25 09:58:47 回复(0)
答案错了吧:ycdBCD
发表于 2016-11-25 15:05:37 回复(1)