执行strcpy函数

Man*_*nny -2 c

#include <stdio.h>
char *strcpy_(char *dst, char *src)
{
  while((*src++ = *dst++)!= '\0')
  return src;
}
main()
{
  char src_str[] = "C programming language";
  char dst_str[100];
  printf("dst_str:%s\n", strcpy_(dst_str, src_str));
}
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 8

除了向错误的方向复制外,在while循环结束时缺少分号:

char *strcpy_(char *dest, char *src) {
    char *orig = dest;
    while((*dest++ = *src++)!= '\0')
        ; // <<== Very important!!!
    return orig;
}
Run Code Online (Sandbox Code Playgroud)

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

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

while(*dest++ = *src++)
    ;
Run Code Online (Sandbox Code Playgroud)