Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用指针的strcopy函数不起作用_C_Pointers_Strcpy - Fatal编程技术网

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

使用指针的strcopy函数不起作用,c,pointers,strcpy,C,Pointers,Strcpy,我需要创建一个函数,该函数接收两个char指针,并将其中一个指针的内容复制到另一个指针中,然后返回指针的开头。我已经花了几个小时来处理这个问题,并且已经阅读了100个完全不同的例子。以下是我现在拥有的: char * mystrcpy(char * dest, char * src) { while(1) { if(*src == '\0') { *dest = '\0'; return dest;

我需要创建一个函数,该函数接收两个char指针,并将其中一个指针的内容复制到另一个指针中,然后返回指针的开头。我已经花了几个小时来处理这个问题,并且已经阅读了100个完全不同的例子。以下是我现在拥有的:

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

您想要的是递增指针,而实际上递增指针指向的字符

改变

*src++;
*dest++;
致:


您想要的是递增指针,而实际上递增指针指向的字符

改变

*src++;
*dest++;
致:

dest是一个指针,您移动它是为了从src复制值 所以,当您返回dest时,它已经指向字符串的末尾

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

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

dest[i] = '\0';

return dest;
因此,即使将*dest++修改为dest++,返回的内容也不会给出预期的结果

dest是一个指针,您移动它是为了从src复制值 所以,当您返回dest时,它已经指向字符串的末尾

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

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

dest[i] = '\0';

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

这两行:

    *src++;
    *dest++; 
应该是:

    src++;
    dest++;
请注意,由于代码需要增加指针,而不是指针指向的对象,因此没有取消指针引用

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

因此,这两个字符串的集中出现,而不是覆盖dest中的初始字符串

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

+1允许终止字节。

这两行:

    *src++;
    *dest++; 
应该是:

    src++;
    dest++;
请注意,由于代码需要增加指针,而不是指针指向的对象,因此没有取消指针引用

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

因此,这两个字符串的集中出现,而不是覆盖dest中的初始字符串

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


+1允许终止字节。

您正在递增字符而不是指向字符的指针,并且无法跟踪目标字符串的开头。首先尝试一些简单的练习。您正在递增字符而不是指向它们的指针,并且无法跟踪目标字符串的开头。先做一些简单的练习。做完之后,我返回的结果仍然不能给我正确的输出。例如,如果我给一个src作为Hello world,它返回@Cory你正在移动你的指针,这是错误的,以便返回值在这样做之后,我返回的仍然没有给我正确的输出。例如,如果我给一个src命名为helloworld,它返回@Cory,你正在移动你的指针,这是错误的,为了返回更有意义的值。非常感谢!这更有意义。非常感谢!