繁体   English   中英

在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 != '\0'; ++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 != '\0'; ++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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM