在 C 中实现 strcpy 时出现问题

Issue when implementing strcpy in C

对于家庭作业,我应该实现 string.h 库 (2fun2handle) 的所有 22 个函数。我已经关闭了很多功能,但是 运行 在尝试实现 strcpy 时遇到了一些麻烦。

经过多次修改,这是我对功能的尝试:

char *new_strcpy(char *dest, const char *src){
    char *copy = (char *) src;
    for(; *copy != '[=10=]'; ++copy, ++dest)
        *dest = *copy;
    return dest;
}

我认为这会很好用。但是,当通过像这样的简单示例测试我的代码时:

char src[50], dest[50];
new_strcpy(src,  "src");
new_strcpy(dest,  "dest");
printf("dest: %s\n", dest);
printf("src: %s\n", src);

我的输出最终看起来像这样:

dest: dest$
src: src$$$$

什么时候它应该看起来像这样:

dest: dest
src: src

在实现这个函数之前,我已经使用指针毫无问题地将 src 字符串复制到 dest 字符串。所以我不确定为什么现在会发生这种情况。有什么明显的我做错了吗?另请注意,我尝试使用 while 循环执行此操作并循环直到 *copy 为空,并且我尝试直接遍历传入的原始 *dest*src 参数.

您永远不会使用特殊的零字符将实际字符串标记为已完成:

char *new_strcpy(char *dest, const char *src){
    char *copy = (char *) src;
    for(; *copy != '[=10=]'; ++copy, ++dest)
        *dest = *copy;
    *dest=0;
    return dest;
}

请注意,您不需要 copy 变量,它只是编译器会为您删除的垃圾。

编辑:根据要求,经典的 strcpy 函数没有丢弃 const 并且不那么冗长,如下所示:

char *new_strcpy(char *dest, const char *src)
{
  char *ret = dest;            // needed to return, useless as this is
  while(*dest++ = *src++);     // straight byte copy, very unoptimized
  //*dest=0;                   // no longer needed since the copy happens before the check now
  return ret;                  // and return the original buffer (note that you were returning the end)
}