strcpy函数使用指针不起作用

时间:2015-02-03 03:36:03

标签: c pointers strcpy

我需要创建一个接收两个char指针并将一个内容复制到另一个中的函数,然后返回指针的开头。我现在已经搞乱了几个小时,并阅读了100个不同的例子。这就是我现在所拥有的:

char * mystrcpy(char * dest, char * src) {
        while(1) {
          if(*src == '\0') {
            *dest = '\0';
            return dest;
          }
          else {
            *dest = *src;
            *src++;
            *dest++;
          }
        }

3 个答案:

答案 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是允许终止字节。