【问题标题】:strcopy function using pointers not working使用指针的 strcpy 函数不起作用
【发布时间】:2015-04-02 04:16:01
【问题描述】:

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

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

【问题讨论】:

标签: c pointers strcpy


【解决方案1】:

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

改变

*src++;
*dest++;

到:

src++;
dest++;

【讨论】:

  • 这样做之后,我返回的内容仍然没有给我正确的输出。例如,如果我将 src 作为“Hello world”,它会返回“”
  • @Cory 您正在移动错误的指针以返回值
【解决方案2】:
dest++;

dest 是一个指针,您正在移动它以便从src 复制值 因此,当您返回 dest 时,它已经指向字符串的结尾。

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

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

dest[i] = '\0';

return dest;

因此,即使您将 *dest++ 修复为 dest++,您返回的内容也不会产生预期的结果。

【讨论】:

  • 这更有意义。非常感谢!
【解决方案3】:

这两行:

    *src++;
    *dest++; 

应该是:

    src++;
    dest++;

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

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

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

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

+1 是允许终止字节。

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多