首页 > 试题广场 >

下列程序的输出结果是?

[单选题]
下列程序的输出结果是
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
    char p1[10] = "abcd", *p2, str[10] = "xyz";  
    p2 = "ABCD";
    strcpy(str + 2, strcat(p1 + 2, p2 + 1));
    printf(" %s", str);
}
  • xyabcAB
  • abcABz
  • ABabcz
  • xycdBCD
推荐
D
strcat(p1 + 2, p2 + 1)
表示将p2+1所指字符串"BCD"拼接在"cd"字符串后面形成"cdBCD";
strcpy(str + 2, "cdBCD");
将字符串拷贝到str +2 的未知形成"xycdBCD"
编辑于 2015-02-05 11:41:23 回复(5)

原型:char  *strcat  ( char  *dest, const  char  *src)

    用法:#include  <string.h>

    功能:连接两个字符串;strcat()会将参数src字符串 拷贝到 参数dest所指的字符串尾。 第一个参数dest要有足够的空间来容纳要拷贝的字符串。

    说明:strcat()返回dest的字符串起始地址。

发表于 2015-08-03 23:03:22 回复(3)
当时做题的时候理解错误,strcat(p1 + 2, p2 + 1)返回值是指向p1+2的指针,也就是指向‘c’的指针,后面很好做了
发表于 2016-02-17 14:29:04 回复(1)
      strcat 是连接函数, strcpy 是拷贝函数。(不记得可百度查下)。
strcat(p1 + 2, p2 + 1))返回值是p1+2的地址(指针),而不是P1的地址。可以用程序测试,如下图。
先执行strcat(p1 + 2 , p2 + 1),结果:cdBCD。strcpy之后的str就是xycdBCD。

编辑于 2017-04-11 21:22:30 回复(0)
p2 = "ABCD";
非常量的char指针可以指向字符串?
发表于 2021-09-18 16:25:56 回复(0)
p1+2 : cd;
p2+1 : BCD;
先执行strcat(p1 + 2 , p2 + 1)
结果:cdBCD
strcpy之后的str为:xycdBCD
所以选D
发表于 2017-03-23 20:40:00 回复(2)
<p>str+2是让指针指向数组下标为2的位置,后面的字符串直接覆盖这个位置的数据进行拼接</p>
发表于 2020-10-13 11:05:25 回复(0)
拷贝和复制以后怎么调用呢?所以要返回char*dest的地址
发表于 2023-10-24 20:36:31 回复(0)
返回的是地址p1+2,字符串拼接在最后
发表于 2023-10-12 16:26:48 回复(0)
strcat(p1+2,p2+1)返回的是p1+2的地址
发表于 2023-03-21 16:39:21 回复(0)
源码面前了无秘密:
char* strcat(char *strD, const char *strS)
{
    assert(strD != NULL && strS != NULL);
    char* address = strD;
    while(*strD != '\0')//走到末尾
        strD ++;
    while(*strD++ = *strS++);//cat
    return address; //attention
}
char* strcpy(char *strD, const char *strS)
{
    assert(strD != NULL && strS != NULL);
    char* address = strD ;
    //attention此处,若*strS为’\0‘,则其先赋值给strD,故最后不需要再添加'\0'
    while(*strD++ = *strS++);
    return address;
}

编辑于 2019-04-18 10:28:49 回复(0)
一个是连接函数,一个是拷贝函数
发表于 2016-01-25 20:46:22 回复(0)
int main() {
    char p1[10] = "abcd", * p2, str[10] = "xyz";
    p2 = "ABCD";
    char* p3 = strcat(p1 + 2, p2 + 1);//p1+2:cd     p2+1:BCD  =>p1+2:cdBCD    =>p1:abcdBCD
    strcpy(str + 2, p3);   //str+2:z     p3:cdBCD      =>str+2:cdBCD
    printf("%s", str);    //str:xycdBCD
    
    return 0;
}

发表于 2023-07-01 10:01:48 回复(1)
🙄
发表于 2023-03-16 00:02:55 回复(0)
strcat是将两个月字符串拼接在一起,故形成的新字串为cd....
发表于 2021-03-29 20:03:41 回复(0)

Strcat是在地址上开始进行叠加


发表于 2020-04-12 10:28:52 回复(0)
strcat把两个字符串连接起来
发表于 2019-12-09 08:43:29 回复(0)
strcat和strcpy理解错误,应该是函数指向的位置到字符串结尾
发表于 2019-09-07 11:18:42 回复(0)
char * strcat(char *dest,const char * src) 返回的是dest指针。这儿也就是指向 c 开始的字符串。
发表于 2017-09-09 09:31:06 回复(0)
不知道为什么
发表于 2015-09-16 17:39:38 回复(0)
strcat ( p1 + 2 , p2 + 1 ) 运行出错。
发表于 2014-12-15 17:35:46 回复(0)