【发布时间】:2015-03-19 05:09:11
【问题描述】:
对于家庭作业,我应该实现 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 参数。
【问题讨论】:
-
您没有以空值终止目标 - for 循环中断并且您永远不会复制空值。
-
您必须以空值终止您的字符串,方法是在循环后显式执行此操作或使用
do ... while。strcpy返回dest的(初始值)。您将指针返回到dest字符串的末尾(这甚至可能是一个更有用的返回值)。 -
没有真正回答你的问题,但我认为这种 strcpy 方法真的很酷:while(*dest++=*src++);