不兼容的类型分配' void *'来自malloc的' char" ------

时间:2013-08-01 10:51:44

标签: c++ malloc type-conversion

我正在使用ide dev-cpp。当我尝试执行我的程序时

char *path;
path = malloc(10);

此代码返回错误:

  

34 20 E:\ C \ dir.cpp [错误]无效转换为' void *'到#char;' [-fpermissive]

是什么原因?

如何为char数组动态分配内存?

4 个答案:

答案 0 :(得分:3)

您正在使用C ++编译器而不是C编译器进行编译,正如问题的C标记所建议的那样。实际上,编译器名称和文件名都支持您使用C ++编译器的事实。

您的代码在C中有效,但在C ++中无效。在C ++中,您需要转换malloc返回的值。有关C和C ++之间差异的冗长讨论,请参阅Eli Bendersky撰写的这篇文章:void* and casts, in C and C++

但是,如果您正在编写C ++,那么您通常会避免使用malloc和原始指针,而是使用std::string

或者,如果您正在编写C,那么您只需要使用C编译器编译代码。

答案 1 :(得分:1)

您最初将此标记为C,但源文件dir.cpp的文件扩展名表明您正在尝试编写C ++。如果您打算编写C ++,那么您根本不应该使用malloc。使用std::string并使用new分配内存。

如果出于某种原因你必须使用C ++编译器来编译C,那么你必须明确地从malloc转换返回的指针:

path = (char*) malloc (10);

但是,建议您最好决定使用哪种语言。要么直接编写C ++,要么使用C编译器来编写C代码。尝试使用C ++编译器会导致这种性质的伪造警告,并且绕过这些警告将导致您的C代码变得非常丑陋和非C类似,就像在当前实例中一样。

答案 2 :(得分:0)

在dev-cpp中更改用于代码的编译器

  1. 转到dev-cpp菜单 - >项目 - >项目选项 - >文件标签
  2. 使用您的代码选择文件
  3. 取消选中Compile file as C++
  4. Dev-cpp版本4.9.9.2。

答案 3 :(得分:0)

malloc返回指向已分配内存的void指针。 由于您正在使用C ++编译器进行编译,在此处进行强类型检查,因此会引发错误。 对它进行类型转换将解决您的问题。

path = (char * ) malloc (10); 会工作的。

此外,不使用像10这样的数字,而是使用sizeof运算符,例如

path = (char *) malloc (10 * sizeof(char));