用c自己实现strcpy函数

时间:2022-09-05 22:55:48
char *mystrcpy(char *dest, const char *src)
{
         int i;
         for(i = 0;*dest[i] = *src[i];i++)
                  ;
         return dest;
}



为什么不行?

20 个解决方案

#1




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

}



#2


  for(i = 0;dest[i] = src[i];i++)
  ;
==========
加多了*

#3


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;dest[i] = src[i];i++)//应该这样子,你混乱了,楼主
  ;
  return dest;
}

#4


二楼正解

#5


语病太多了,1、要么用指针,要么用下标,你这两个都用上了;2、for循环没有结束条件,当然不行了。如果用下标的话,for循环那句应该写成:
for (i = 0; src[i] != '\0'; dest[i] = src[i], i++)

#6


引用 2 楼 mingliang1212 的回复:
for(i = 0;dest[i] = src[i];i++)
  ;
==========
加多了*


犀利!

#7


*dest[i] 错了 用dest[i]就可以了 src也一样

#8


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;*(dest+i) = *(src+i);i++)//或者这样子,你混乱了,楼主
  ;
  return dest;
}

#9


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;*dest[i] = *src[i];i++)
  ;
  return dest;
}

还从来没见过这样的程序
char类型指针参数 “*dest” 和 “*src”怎么变成了 char类型的指针数组 “*dest[i]”和
“*src[i]” 了 ,
还有for循环语句可以没有循环体吗? 返回值应该也要加上“*”吧。
c和c++ 很久没用了 不太记得了 并且学得也不精 哪位高手帮我解答下

#10


char *  mystrcpy(char * str,const char *destr){

char *temp=str;



while(*destr!='\0'){
*(temp++)=*(destr++);
}
*temp='\0';

return str;

}
 这个清楚点

#11


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;dest[i] = src[i];i++)
  ;
  return dest;
}
或者
char *mystrcpy(char *dest, const char *src)
{
  char *tmp = dest;
  int i;
  for(i = 0;*tmp++ = *src++;i++)
  ;
  return dest;
}

#12


char *str与char str[]等同,操作方式几乎完全一样。

#13


3楼对的。。

#14


蛋痛的面试题,最少做过五次;

#15


引用 1 楼 ivers0n 的回复:
C/C++ code


char * mystrcpy(char * strDest,const char * strSrc)
{
    if(strDest==NULL || strSrc==NULL)
    {
        return NULL;
    }
    char * temp_src =(char *)strSrc;
    while( (*strDest++ ……


++

#16


参考
C:\Microsoft SDK\src\crt\strcat.c
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\strcat.c
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\STRCAT.C
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\Intel\STRCAT.ASM
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\intel\strcat.asm
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\intel\strcat.asm
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\strcat.asm
C:\Program Files\Borland\CBuilder6\Source\Rtl\Source\cstrings\strcat.asm
之一里面strcpy函数的实现源代码。

#17


引用 1 楼 IVERS0N 的回复:
C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。

#18


#include <stdio.h>
char* mystrcpy(char *dest, const char *src){
    char *p = dest;
    while(*dest++ = *src++);
    return p;
}
int main(void){
    char buf[10];
    printf("%s", mystrcpy(buf,"hello"));
}

#19


引用 17 楼 David_xtd 的回复:
Quote: 引用 1 楼 IVERS0N 的回复:

C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。


请问下为什么应该保存strDest?

#20


引用 19 楼 Sunnyfans 的回复:
Quote: 引用 17 楼 David_xtd 的回复:

Quote: 引用 1 楼 IVERS0N 的回复:

C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。


请问下为什么应该保存strDest?


char* tmp_src=(char*)strSrc;这段代码,旨在栈中分配一块内存用来保存源字符串的首地址,但是将整段代码运行完毕,个人感觉并没有用到这一保存来的地址。linux下调试这段代码,无论你是保存源字符串的地址,目标字符串的地址,或者是对两者都不保存,并不影响你结果返回目标字符串的首地址,也就是说,不加这句,或者你保存任何一个,结果都是一样的。个人见解,不足之处多多见谅。

#1




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

}



#2


  for(i = 0;dest[i] = src[i];i++)
  ;
==========
加多了*

#3


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;dest[i] = src[i];i++)//应该这样子,你混乱了,楼主
  ;
  return dest;
}

#4


二楼正解

#5


语病太多了,1、要么用指针,要么用下标,你这两个都用上了;2、for循环没有结束条件,当然不行了。如果用下标的话,for循环那句应该写成:
for (i = 0; src[i] != '\0'; dest[i] = src[i], i++)

#6


引用 2 楼 mingliang1212 的回复:
for(i = 0;dest[i] = src[i];i++)
  ;
==========
加多了*


犀利!

#7


*dest[i] 错了 用dest[i]就可以了 src也一样

#8


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;*(dest+i) = *(src+i);i++)//或者这样子,你混乱了,楼主
  ;
  return dest;
}

#9


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;*dest[i] = *src[i];i++)
  ;
  return dest;
}

还从来没见过这样的程序
char类型指针参数 “*dest” 和 “*src”怎么变成了 char类型的指针数组 “*dest[i]”和
“*src[i]” 了 ,
还有for循环语句可以没有循环体吗? 返回值应该也要加上“*”吧。
c和c++ 很久没用了 不太记得了 并且学得也不精 哪位高手帮我解答下

#10


char *  mystrcpy(char * str,const char *destr){

char *temp=str;



while(*destr!='\0'){
*(temp++)=*(destr++);
}
*temp='\0';

return str;

}
 这个清楚点

#11


char *mystrcpy(char *dest, const char *src)
{
  int i;
  for(i = 0;dest[i] = src[i];i++)
  ;
  return dest;
}
或者
char *mystrcpy(char *dest, const char *src)
{
  char *tmp = dest;
  int i;
  for(i = 0;*tmp++ = *src++;i++)
  ;
  return dest;
}

#12


char *str与char str[]等同,操作方式几乎完全一样。

#13


3楼对的。。

#14


蛋痛的面试题,最少做过五次;

#15


引用 1 楼 ivers0n 的回复:
C/C++ code


char * mystrcpy(char * strDest,const char * strSrc)
{
    if(strDest==NULL || strSrc==NULL)
    {
        return NULL;
    }
    char * temp_src =(char *)strSrc;
    while( (*strDest++ ……


++

#16


参考
C:\Microsoft SDK\src\crt\strcat.c
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\src\crt\strcat.c
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\STRCAT.C
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\Intel\STRCAT.ASM
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\intel\strcat.asm
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src\intel\strcat.asm
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\strcat.c
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\intel\strcat.asm
C:\Program Files\Borland\CBuilder6\Source\Rtl\Source\cstrings\strcat.asm
之一里面strcpy函数的实现源代码。

#17


引用 1 楼 IVERS0N 的回复:
C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。

#18


#include <stdio.h>
char* mystrcpy(char *dest, const char *src){
    char *p = dest;
    while(*dest++ = *src++);
    return p;
}
int main(void){
    char buf[10];
    printf("%s", mystrcpy(buf,"hello"));
}

#19


引用 17 楼 David_xtd 的回复:
Quote: 引用 1 楼 IVERS0N 的回复:

C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。


请问下为什么应该保存strDest?

#20


引用 19 楼 Sunnyfans 的回复:
Quote: 引用 17 楼 David_xtd 的回复:

Quote: 引用 1 楼 IVERS0N 的回复:

C/C++ code?1234567891011char * mystrcpy(char * strDest,const char * strSrc){    if(strDest==NULL || strSrc==NULL)    {        return NULL;    }    char * temp_src =(char *)strSrc;    whil……


2L有错,不应该保存strSrc,应该保存strDest。


请问下为什么应该保存strDest?


char* tmp_src=(char*)strSrc;这段代码,旨在栈中分配一块内存用来保存源字符串的首地址,但是将整段代码运行完毕,个人感觉并没有用到这一保存来的地址。linux下调试这段代码,无论你是保存源字符串的地址,目标字符串的地址,或者是对两者都不保存,并不影响你结果返回目标字符串的首地址,也就是说,不加这句,或者你保存任何一个,结果都是一样的。个人见解,不足之处多多见谅。

#21