【问题标题】:Invalid conversion error while using malloc使用 malloc 时出现无效转换错误
【发布时间】:2017-03-15 19:33:25
【问题描述】:

我正在尝试用 C 编写一个 shell 程序。下面的函数应该获取用户行输入。我在尝试 malloc 的行上不断收到“从 void*char** 的无效转换错误。

我不明白为什么。谁能解释一下?

char *get_line_input(void)
{
  int scan;
  int buff_size = 1024;
  int argument_tracker = 0;
  char *line = malloc(sizeof(char) * buff_size);

  while (1) {
    scan = getchar();
    if (scan == '\n') {
      line[argument_tracker] = '\0';
      return line;
    } else {
      line[argument_tracker] = scan;
    }
    argument_tracker++;
  }
}

【问题讨论】:

  • 你确定你没有使用c++编译器
  • 无法重现:干净编译。
  • 从 'void*' 到 'char**' 错字从 'void*' 到 'char*' ?
  • #ifdef __cplusplus #error arrrgh! C++ #endif

标签: c linux shell unix malloc


【解决方案1】:

您可能正在使用 C++ 编译器/C++ 模式,其中没有从 void*T* 的隐式转换。在 C 语言中,您不应该收到此错误,因为 void* 可以分配给任何其他数据指针而无需显式强制转换。

您可以使用 C 编译器,或者如果必须使用 C++ 编译器,则进行适当的转换。

【讨论】:

    【解决方案2】:

    因为 void * 不能在 c++ 中隐式转换为 char * 并且您可能正在使用 c++。快速修复:

    char *line = (char *)malloc(sizeof(char) * buff_size);
    

    你应该阅读Do I cast the result of malloc?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 2017-07-20
      • 1970-01-01
      • 2011-07-03
      • 2013-06-25
      • 2014-08-18
      相关资源
      最近更新 更多