我正在使用ide dev-cpp。当我尝试执行我的程序时
char *path;
path = malloc(10);
此代码返回错误:
34 20 E:\ C \ dir.cpp [错误]无效转换为' void *'到#char;' [-fpermissive]
是什么原因?
如何为char数组动态分配内存?
答案 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中更改用于代码的编译器
Compile file as C++
Dev-cpp版本4.9.9.2。
答案 3 :(得分:0)
malloc返回指向已分配内存的void指针。 由于您正在使用C ++编译器进行编译,在此处进行强类型检查,因此会引发错误。 对它进行类型转换将解决您的问题。
path = (char * ) malloc (10);
会工作的。
此外,不使用像10这样的数字,而是使用sizeof运算符,例如
path = (char *) malloc (10 * sizeof(char));