在 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)
}
对于家庭作业,我应该实现 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)
}