1

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

char *path;
path = malloc(10);

此代码返回错误:

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

是什么原因?

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

4

4 回答 4

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 编译器编译代码。

于 2013-08-01T10:55:56.613 回答
1

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

如果由于某种原因您必须使用 C++ 编译器来编译 C,那么您必须malloc显式地转换返回的指针:

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

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

于 2013-08-01T10:59:06.207 回答
0

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

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

开发 cpp 版本 4.9.9.2。

于 2013-08-01T10:57:33.777 回答
0

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

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

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

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

于 2013-08-01T11:05:45.813 回答