我需要创建一个接收两个char指针并将一个内容复制到另一个中的函数,然后返回指针的开头。我现在已经搞乱了几个小时,并阅读了100个不同的例子。这就是我现在所拥有的:
char * mystrcpy(char * dest, char * src) {
while(1) {
if(*src == '\0') {
*dest = '\0';
return dest;
}
else {
*dest = *src;
*src++;
*dest++;
}
}
答案 0 :(得分:4)
你想要的是增加指针,同时实际增加它们指向的角色。
更改
*src++;
*dest++;
为:
src++;
dest++;
答案 1 :(得分:2)
dest++;
dest
是一个指针,您正在移动它以便从src
复制值
因此,当您返回dest
时,它已经指向字符串的结尾。
所以不要移动这个指针,只需使用索引将值复制到它。
int i=0;
while( *src)
{
dest[i] = *src;
i++;
src++;
}
dest[i] = '\0';
return dest;
因此,即使您将*dest++
修改为dest++
,您返回的内容也不会给出预期结果。
答案 2 :(得分:0)
这两行:
*src++;
*dest++;
应该是:
src++;
dest++;
注意没有指针的去引用,因为代码需要递增指针,而不是指针指向的指针。
保存dest的初始值是个好主意,因此可以返回它。为了避免丢失已经存在于dest缓冲区中的任何字符串,我怀疑dest的值(保存后)需要增加dest + = strlen(dest);
因此会出现两个字符串的集中,而不是在dest中覆盖初始字符串。
在调用该函数之前,应该检查dest缓冲区是否足够长,以保持两个字符串+1的strlen()。
+1是允许终止字节。