编写 strcpy函数已知 strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。(1)不调用 C++/C 的字符串库函数,请编写函数 strcpy(2)strcpy能把 strSrc 的内容复制到 strDest,为什么还要 char * 类型的返回值?

题目

编写 strcpy函数

已知 strcpy函数的原型是

char *strcpy(char *strDest, const char *strSrc);

其中 strDest 是目的字符串,strSrc 是源字符串。

(1)不调用 C++/C 的字符串库函数,请编写函数 strcpy

(2)strcpy能把 strSrc 的内容复制到 strDest,为什么还要 char * 类型的返回值?


相似考题
更多“编写 strcpy函数已知 strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中 strDest 是目的字符串,strSrc 是源字符串。(1)不调用 C++/C 的字符串库函数,请编写函数 strcpy(2)strcpy能把 strSrc 的内容复制到 strDest,为什么还要 char * 类型的返回值?”相关问题
  • 第1题:

    若有定义: char *st= "how are you "; ,下列程序段中正确的是A.char a[11], *p; strcpy(p=a+1,&a

    若有定义: char *st= "how are you "; ,下列程序段中正确的是

    A.char a[11], *p; strcpy(p=a+1,&st[4]);

    B.char a[11]; strcpy(++a, st);

    C.char a[11]; strcpy(a, st);

    D.char a[], *p; strcpy(p=&a[1],st+2);


    正确答案:A
    解析:本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:str1="China",如果想把"China"这5个字符放到数组str1中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(str1,"China")或strcpy(str1,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给str1):str1=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
    strcpy函数的结构是:strcpy(字符数组1,字符串2)
    其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,"字符数组1"必须写成数组名形式,如(str1),"字符串2"可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

  • 第2题:

    ( 14 )补充完整下面的类定义:

    class XCH{

    char* a;

    public:

    XCH ( char* as ) { // 构造函数

    a=new char[strlen ( aa ) +1];

    strcpy ( a,aa ) ;

    }

    XCH& perator= ( const XCH& x ) // 重载赋值函数

    Delele []a;

    A=new char[strlen ( x.a ) +l];

    strcpy ( a, x .a )

    【 14 】 ;

    }

    ~XCH () {delete []a;}

    };


    正确答案:

  • 第3题:

    补充完整下面的类定义:

    class XCH{

    char*a;

    public:

    XCH(char*a A) { //构造函数

    a=new char[strlen(aA) +1];

    strcpy(a,aA) ;

    }

    XCH&operator=(const XCH&x){//重载赋值函数

    delete[ ]a;

    a=new char[strlen(x.A) +1];

    strcpy(a,x.A) ;

    ______;

    }

    ~XCH( ){delete[ ]a;}

    };


    正确答案:return*this
    return*this

  • 第4题:

    阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。

    [函数2.1说明]

    函数strcpy的功能是将字符串str2的内容复制到字符申str1。

    [函数2.1]

    (1) strcpy (char *slr1, const char *str2)

    { char * temp;

    while( * str2!='\0') *cp++ =(2);

    (3)='\0';

    return str1;

    }

    [函数2.2说明]

    函数int strcmp(const char *str1, const char *str2)的功能是按字典序比较两个字符串str1和str2的大小。当str1<str2时返回-1,当str1>str2时返回1,否则返回0。

    [函数2.2]

    int strcmp(const char *str1, const char *str2)

    { while( *str1= =* str2) {

    if(* s1= =(4)) return 0;

    s1++;

    (5);

    }

    if( *str1<*str2) return -1;

    return 1;

    }


    正确答案:char * (2) * str2++ (3) * cp (4) ‘\0’ (5) s2++或 ++s2
    char * (2) * str2++ (3) * cp (4) ‘\0’ (5) s2++或 ++s2 解析:(1)根据函数说明,char *是函数strcpy的返回值类型;
    (2)while循环是字符串复制的关键,它将str2的字符一个个复制到cp;
    (3)字符复制完成后,应在字符串cp的末尾添加结束符;
    (4)~(5):while循环的功能是从字符串首开始逐个比较str1和str2的每一字符,如果循环一直执行到两字符串末尾,则说明两串相等,应返回0值。

  • 第5题:

    请编写能直接实现char * strcpy(char * pstrDest,const char * pstrSource)函数功能的代码。


    正确答案:

     

    4.

      char * strcpy(char * pstrDest,const char * pstrSource)

      {

      assert((pstrDest!=NULL)&&(pstrSource!=NULL));

      char * pstr=pstrDest;

      while((*(pstrDest++)=*(pstrSource++))!='\0');

       return pstr;

      }

  • 第6题:

    补充完整下面的类定义:

    class XCH{

    char*a:

    public:

    XCH(char球an){ //构造函数

    a=new char[strlen(aft)+1];

    strcpy(a,aA);

    }

    XCH&operator=(const XCH&x){ //重载赋值函数

    delete[]a;

    a=new char[strlen(X.A)+1];

    strcpy(a,x.A);

    【 】

    }

    一XCH(){delete[]a;}

    };


    正确答案:return XCH(A)
    return XCH(A) 解析:要函数返回的是XCH&类型,因此这里要调用XCH构造函数定义一个临时的XCH对象作为返回值。

  • 第7题:

    已知strcpy 的函数原型:char *strcpy(char

    *strDest, const char *strSrc)其中strDest 是目的字符

    串,strSrc 是源字符串。不调用C++/C 的字符串库

    函数,请编写函数strcpy。


    正确答案:

     

    char *strcpy(char *strDest, const char *strSrc)
    {
    if ( strDest == NULL || strSrc == NULL)
    return NULL ;
    if ( strDest == strSrc)
    return strDest ;
    char *tempptr = strDest ;
    while( (*strDest++ = *strSrc++) != ‘\0’)
    ;
    return tempptr ;
    }

  • 第8题:

    库函数strcpy用以复制字符串,若有以下定义和语句: char str1[]="china",str2[10],*str3,*str4="china"; 则对库函数strcpy的正确的调用是_______。

    A.strcpy(strl,"people");

    B.strcpy(str2,"people");

    C.strcpy(str3,"people");

    D.strcpy(str4,"people");


    正确答案:B
    解析:strcpy(字符数组1,字符串2)其作用是将字符串2复制到字符数组1中去。注: (1)字符数组1必须定义得足够大; (2)“字符数组1”必须写成数组名的形式; (3)复制时连同字符串后面的'\0'一起复制到字符数组1中。

  • 第9题:

    若有下列说明,则( )不是对strcpy库函数的正确的调用。strcpy库函数用于复制一个字符串:char*str1="abcdt",str2 [10],*str3="hijklmn",*str4[2],*str5="aaaa";

    A.strcpy(str2,str1)

    B.strcpy(str3,str1)

    C.strcpy(str4,str1)

    D.strcpy(str5,str1)


    正确答案:C
    解析:strcpy(s1,s2)函数的功能是将字符串s2复制到字符串s1中(注意:要保证s1存储区能容纳下s2字符串)。

  • 第10题:

    以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。 #include <stdio.h> #include <string.h> char *scmp(char*s1,char*s2) { if(strcmp(s1,s2)<0) return(s1); else return(s2); } main() { int i; char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]); strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf("%s\n",string); } 若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为( )。

    A.abcd

    B.abba

    C.abc

    D.baca


    正确答案:B
    解析:本题考查返回指针值的函数。一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。函数strcmp(字符串1,字符串2)的作用是比较字符串1和字符中2。如果字符串1=字符串2,函数值为0;如果字符串1,字符串2,函数值为一正整数;如果字符串1字符串2,函数值为一负整数。本题程序中scmp函数的作用是比较s1和s2的大小,对strcmp函数的返回值进行判断,如果字符串1字符串2,则返回字符串1的值,反之返回字符串2的值。所以main函数中scmp(str[0],str[1])的返回值是abba,通过strcpy函数把返回值abba复制到string中。当执行scmp(string,str[2])时,scrap函数的返回值为abba,再次复制到string中,最后string的值为abba。

  • 第11题:

    字符串的处理函数strcpy是系统定义的,作用是进行字符串拷贝,两个参数,返回值为char*。


    正确答案:正确

  • 第12题:

    判断题
    字符串的处理函数strcpy是系统定义的,作用是进行字符串拷贝,两个参数,返回值为char*。
    A

    B


    正确答案:
    解析: 暂无解析

  • 第13题:

    若有定义:char *x="abcdefghi";,以下选项中正确运用了strcpy函数的是______。

    A.char y[10]; strcpy(y,x[4]);

    B.char y[10]; strcpy(++y,&x[1]);

    C.char y[10],*s; strcpy(s=y+5,x);

    D.char y[10],*s; strcpy(s=y+1,x+1);


    正确答案:D
    解析:选项A中x[4]是取字符e,也就是将字符复制到y中,strcpy实现的是地址的复制所以选项A错误;选项B中++y是错误的,不允许对常量进行自加运算(y是—个确定的地址值),所以选项B错误;选项C指针变量s指向了y向后的第5位,则存放x时会出现越界问题,所以选项C错误;选项D中,指针变量s指向了y向后的第—位,此时s可存放数据的长度为9,而地址“x+1”起的字符串的地址长度也刚好为9(包括“\0”),所以开始复制不会出现地址越界问题,故选项D正确。

  • 第14题:

    若有下列说明,则( )不是对strcpy库函数的正确的调用。strcpy库函数用于复制一个字符串:char*strl="abcd",str2[10],*str3="hijklmn",*str4[2],*str5="aaaa";

    A.language

    B.lnug

    C.有语法错误

    D.lang


    正确答案:B
    解析: 本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地址。
    第1次for循环,p=a,p指向数组的第1个元素,*p是取指针p所指地址的内容,输出1;第2次for循环,p=p+2,则p指向数组的第3个元素,*p是取指针p所指地址的内容,输出n;第3次for循环,p= p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出u;第4次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出g,结束循环。

  • 第15题:

    设有语句:char str1[]="string",str2[8],*str3,*str4="string";,则下列对库函数strcpy调用不正确的是

    A.strcpy(str1,"Hello1");

    B.strcpy(str2,"Hello2");

    C.strcpy(str3,"Hello3");

    D.strcpy(str4,"Hell04");


    正确答案:C
    解析:本题考核函数调用。函数strcpy的函数原型为:char*strcpy(char*strDest,constchar*trSrC);,其功能是复制strSrc所有字符到strDest,并返回strDest。根据函数strcpy的原型可知选项A)、B)和D)的调用都是正确的。在C)选项中,由于指针*str3没有初始化其字符长度,容易引起访问越界,故是不正确的。

  • 第16题:

    若有以下说明,则( )不是对strcpy库函数正确的调用。strcpy库函数用于复制一个字符串:char*strl="abCd",str2[10],*str3="hijklmn",*str4[2],*str5="aaaa";

    A.strcpy(str2,strl)

    B.strcpy(str3,strl)

    C.strcpy(strl,str2)

    D.strcpy(str5,strl)


    正确答案:C
    strcpy(sl,s2)函数的功能是将字符串s2复制到字符串s1中。要保证s1存储区能容纳下s2字符串。

  • 第17题:

    以下程序中函数scmp功能是返回形参指针s1和s2所指字符串中较小字符串的首地址。#includ<string. h>char *scmp(char *s1,char *s2){ if(strcmp(s1,s2)<0) return(s1); else return(s2);}main(){ int i;char string[20],str[3][20]; for(i=0;i<3;i++) gets(str[i]); strcpy(string,scmp(str[0],str[1])); //库函数 strcpy 对字符串进行复制 strcpy(string,scmp(stfing,str[2])); puts(string); }若运行时依次输入: abed、abba 和abc三个字符串,则输出结果为( )。

    A.abed

    B.abba

    C.abc

    D.abca


    正确答案:B

  • 第18题:

    输入二个 64 位的十进制数,计算相乘之后的乘积

    已知 strcpy 函数的原型是:

    char * strcpy(char * strDest,const char * strSrc);

    1.不调用库函数,实现strcpy 函数。

    2.解释为什么要返回char *。


    正确答案:
     

  • 第19题:

    设有语句:char str1[]="string", str2[8], *ste3, *str4="string";,则下列不是对库函数 strcpy的正确调用的是______。

    A.strcpy(str1,"HELLOI");

    B.strcpy(str2,"HELLO2");

    C.strcpy(str3,"HELLOY");

    D.strcpy(str4,"HELLO4");


    正确答案:C

  • 第20题:

    有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数): #include<stdio.h> #include<string.h> main( ) {char a[10]="abc",b[10]="012",c[10]="xyz"; strcpy(a+1,b+2); puts(strcat(a,c+1)); } 程序运行后的输出结果是( )。

    A.al2xyz

    B.12yz

    C.a2yz

    D.bc2yz


    正确答案:C
    第一次执行字符串的复制函数a的值是a2,第二次执行的是字符串的连接函数,所以运行结果为a2yz。

  • 第21题:

    若有定义:char*st="how are you";下列程序段中正确的是

    A.char a[11],*p;strcpy(p=a+1,&st[4]);

    B.char a[11];strcpy(++a,st);

    C.char a[11];strcpy(a,st);

    D.char a[],*p;strcpy(p=&a[1],st+2);


    正确答案:A
    解析:本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:strl=“China”,如果想把“China”这5个字符放到数组strl中,除了逐个地输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(strl,“China”);或strcpy(strl,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给strl):strl=str2;不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。strcpy函数的结构是:strcpy(字符数组1,字符串2)其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,“字符数组1”必须写成数组名形式,如(strl),“字符串2”可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

  • 第22题:

    设有以下语句:  char str1[]= “string”,str2[8],*str3,*str4= “ string”;      则不能对库函数strcpy(复制字符串)的正确调用的是()

    • A、strepy(str1,“HELLO1”);
    • B、strepy(str2,“HELL02”);
    • C、strcpy(str3, “HELL03”)
    • D、strcpy(str4, “HELLO4”);

    正确答案:C

  • 第23题:

    以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是()

    • A、strcpyl(char*p1,char*p2){while((p1++=p2++)!=’/0’);}
    • B、strcpy2(char*pl,char*p2){while((*p1=*p2)!=’/0’)pl++,p2++;}
    • C、strcpy3(char*pl,char*p2){while((*p1++=*p2++);)
    • D、strcpy4(char*p1,char*p2){whi1e(*p2)*pl++=*p2++;}

    正确答案:D