使用指针的 strcpy 函数不起作用

strcopy function using pointers not working

我需要制作一个接收两个 char 指针并将一个的内容复制到另一个的函数,然后 returns 指针的开头。我已经弄乱了几个小时,并且阅读了 100 个完全不同的例子。这是我现在拥有的:

char * mystrcpy(char * dest, char * src) {
        while(1) {
          if(*src == '[=10=]') {
            *dest = '[=10=]';
            return dest;
          }
          else {
            *dest = *src;
            *src++;
            *dest++;
          }
        }

你想要的是增加指针,而你实际上增加了它们指向的字符。

改变

*src++;
*dest++;

至:

src++;
dest++;
dest++;

dest 是一个指针,您移动它是为了从 src 复制值 所以当你 return dest 它已经指向字符串的结尾。

所以不要移动这个指针,只需使用索引将值复制到它即可。

int i=0;
while( *src)
{
    dest[i] = *src;
    i++;
    src++;
}

dest[i] = '[=11=]';

return dest;

因此,即使您将 *dest++ 修改为 dest++,您 return 也不会给出预期的结果。

这两行:

    *src++;
    *dest++; 

应该是:

    src++;
    dest++;

注意没有取消引用指针,因为代码需要递增指针,而不是指针指向的内容。

并且最好保存dest的初始值,这样可以返回。为了避免丢失 dest 缓冲区中已有的任何字符串,我怀疑 dest 的值(保存后)需要增加 dest += strlen(dest);

所以两个字符串会集中在一起,而不是覆盖 dest 中的初始字符串。

在调用该函数之前,应该检查目标缓冲区是否足够长以容纳两个字符串的 strlen() +1。

+1 允许终止字节。