-3
#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));
}

当我运行这个函数时,这个函数的输出是“编程语言”C消失了,这里发生了什么,我还有一个问题我不想使用数组来传递函数的参数意味着我不想想要使用char src_str[] = "C programming language"orchar dst_str[100]而不是这个,我想使用类似char *src_str = "C programming language"and的指针char *dst_str,如果我使用,我会收到分段错误。

4

4 回答 4

8

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

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

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

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

while(*dest++ = *src++)
    ;
于 2013-01-07T18:56:17.807 回答
1

您用目标字符串覆盖源字符串。您可能希望反过来:

(*dst++ = *src++)
于 2013-01-07T18:55:25.870 回答
0

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

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

您还缺少一个;for 您的 while 循环。

于 2013-01-07T18:56:09.857 回答
0

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

于 2013-01-07T18:55:01.463 回答