实现strcpy函数

  • 本文关键字:函数 strcpy 实现
  • 更新时间 :
  • 英文 :

#include <stdio.h>
char *strcpy_(char *dst, char *src)
{
  while((*src++ = *dst++)!= '')
  return src;
}
main()
{
  char src_str[] = "C programming language";
  char dst_str[100];
  printf("dst_str:%sn", strcpy_(dst_str, src_str));
}

当我运行这个函数的输出是"编程语言"C丢失了,这里发生了什么,我还有一个问题,我不想使用数组传递函数的参数意味着我不想使用char src_str[] = "C programming language"char dst_str[100]而不是这样,我想使用像char *src_str = "C programming language"char *dst_str这样的指针,如果我使用,我会得到一个分割错误。

除了在错误的方向复制之外,您在while循环的末尾缺少一个分号:

char *strcpy_(char *dest, char *src) {
    char *orig = dest;
    while((*dest++ = *src++)!= '')
        ; // <<== Very important!!!
    return orig;
}

如果没有分号(表示空语句),则在复制第一个字符后执行return,这当然是不正确的。

最后,可以跳过循环头中的零检查,如下所示:

while(*dest++ = *src++)
    ;

用目标字符串覆盖源字符串。你可能想用另一种方式:

(*dst++ = *src++)

您正在将dst分配给src,而不是相反。

您似乎正在将dest复制到src !注意,如果你使用了一个更合适的函数原型,那么编译器就会发现这个错误:

char * strcpy(char *dest, const char *src); // <<< note the `const` !!!

你还缺少一个;为你的while循环

最新更新