执行strcpy函数

时间:2013-01-07 18:53:18

标签: 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));
}

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

4 个答案:

答案 0 :(得分:8)

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

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

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

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

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

答案 1 :(得分:1)

使用目标字符串覆盖源字符串。你可能反过来想要它:

(*dst++ = *src++)

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

你的while循环也错过了;