首页 > 试题广场 >

编写 strcpy 函数 已知 strcpy 函数的原型是

[问答题]

编写 strcpy 函数

已知 strcpy 函数的原型是

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

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

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

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

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


 Strcpy 能把 strSrc 的内容复制到 strDest ,还要 char * 类型的返回值是为了增加灵活性,支持链式表达,例如 int length = strlen( strcpy(str, “Hello World”) );

发表于 2017-08-17 15:21:39 回复(0)
更多回答

(1) char  * strcpy ( char  * strDest const   char  * strSrc )

{

     assert (( strDest != NULL ) && ( strSrc  != NULL ));    //这个必须要啊,判断指针是否为空

     char  * address  =  strDest ;                                        

     while ( (* strDest ++ = *  strSrc ++) !=  '\0'  )         

               NULL  ;

     return   address  ;                                                

}

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

答:为了 实现链式表达 式。                                           

例如        int length = strlen( strcpy( strDest, “hello world”) );

发表于 2017-01-22 13:16:42 回复(1)
char * my_strcpy(char *strDest, const char *strSrc)
{
char * strTemp = strDest;
if( (strDest == NULL)||(strSrc == NULL))
{
return NULL;
}
while(*strSrc != '\0')
{
*strTemp = *strSrc;
strSrc++;
strTemp++;
}
*strTemp = '\0';        //这句不能少
return strDest;
}
//在main中strDest数组的大小必须比“welcome”的长度大,否则出错
int main()
{
char strDest[64] = {"hello     world "};
printf("%s\r\n", strDest);
printf("%s\r\n", my_strcpy(strDest, "welcome"));
return 0;
}
发表于 2017-09-09 22:58:12 回复(0)
char *strcpy(char *strDest,const char *strSrc)
{
if (strDest==NULL&&strSrc==NULL)
return NULL;
char *str=strDest;
while (*strSrc!='\0')
{
*str++=strSrc++;
}
return strDest;
}
为了实现链式表达
发表于 2017-09-03 22:20:38 回复(0)