在 malloc 中将"void*"分配给"char"------的类型不兼容

incompatible types in assignment of 'void*' to 'char"------ in malloc

本文关键字:------ char 类型 不兼容 分配 malloc 中将 void      更新时间:2023-10-16

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

char *path;
path = malloc(10);

该代码返回一个错误:

34 20 E:\C:\dir.cpp[Error]从"void*"到"char*"的转换无效[-fpermission]

原因是什么?

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

您使用的是C++编译器,而不是问题的C标记所建议的C编译器。事实上,编译器名称和文件名支持您使用C++编译器的事实。

您的代码在C中有效,但在C++中无效。在C++中,您需要强制转换malloc返回的值。关于C和C++之间的这种区别的详细讨论,请参阅Eli Bendersky的这篇文章:C和C++中的void*和casts。

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

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

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

如果由于某种原因必须使用C++编译器编译C,则必须显式地从malloc强制转换返回的指针:

path = (char*) malloc (10);

然而,最好还是决定使用哪种语言。要么直接编写C++,要么使用C编译器编写C代码。试图使用C++编译器会导致这种性质的虚假警告,绕过这些警告会导致你的C代码变得非常丑陋和非C类,就像在本例中一样。

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

  1. 转到dev-cpp菜单->项目->项目选项->文件选项卡
  2. 使用代码选择文件
  3. 取消选中Compile file as C++

开发cpp版本4.9.9.2。

malloc返回一个指向已分配内存的void指针。由于您使用C++编译器进行编译,在C++编译器中执行强类型检查,因此会引发错误。打字会解决你的问题。

path = (char * ) malloc (10);将起作用。

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

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