【问题标题】:copy string to char**将字符串复制到 char**
【发布时间】:2016-03-03 11:02:53
【问题描述】:

我不明白为什么下面的代码:

char** receive_message(char** ret)
{
    char* temp = "text";

    strcpy(&ret, temp);
    return ret;
}

给出这个错误:

warning: passing argument 1 of ‘strcpy’ from incompatible pointer type [enabled by default]
     strcpy(&ret, temp);

我正在尝试将在函数内部生成的消息复制到在函数外部分配的 char* 数组中。

【问题讨论】:

  • 为什么传递并返回一个char**
  • 您混淆了&ret*ret。但是为什么是retchar**,又为什么要退货呢?
  • 我需要一个函数,它可以让我收到一条带有 msgget 作为字符串的消息。
  • getmsg 的电话都没有。请提供minimal reproducible example
  • 注意`char *?是 指向 char 的指针,而不是数组。

标签: c pointers strcpy


【解决方案1】:

使用

strcpy(*ret, temp);

代替

strcpy(&ret, temp);

您需要尊重 char ** 而不是引用它。

【讨论】:

    【解决方案2】:

    它需要 char* 类型的东西,而 &ret 是 char*** 类型的。

    你可以把它传递给 *ret,它是 char* 类型的。

    【讨论】:

      【解决方案3】:

      retchar**strcpy 需要 char*

      然后你把&ret的地址变成char***

      要么将ret 作为char* 传递给receive_message,要么在传递给strcpy (*ret, temp) 时取消引用

      【讨论】:

        【解决方案4】:

        您正在传递strcpy 指向指向char 的指针的地址...这2 级间接太多了。你不需要所有这些间接,你可以这样简化receive_message

        char *receive_message(char *ret) {
            return strcpy(ret, "text");
        }
        

        真的不值得一个单独的功能;-)

        将指针的地址传递给receive_function 很有用,您是否打算让此函数在调用范围内修改指针,如果您需要重新分配缓冲区,则需要这样做,但是由于您没有传递大小,这样的重新分配将是危险的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-11
          • 2023-04-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多