2011-02-24 38 views
40

我在第5行与下面有错误的代码的麻烦:使用malloc时无效从`void *'转换为`char *'?

error: invalid conversion from void* to char*

我使用克++与码块,我试图编译该文件作为CPP文件。有关系吗?

#include <openssl/crypto.h> 
int main() 
{ 
    char *foo = malloc(1); 
    if (!foo) { 
     printf("malloc()"); 
     exit(1); 
    } 
    OPENSSL_cleanse(foo, 1); 
    printf("cleaned one byte\n"); 
    OPENSSL_cleanse(foo, 0); 
    printf("cleaned zero bytes\n"); 
} 
+2

是的,它很重要。请参阅http://david.tribble.com/text/cdiffs.htm#C99-void-ptr。 –

+25

对不起,大喊大叫,但**不要编译为C++ **。他们不是同一种语言。 –

+1

这个问题被标记为'c'和'C++'。请选择一个,然后删除另一个标签。 –

回答

76

在C++中,你需要转换的malloc()

char *foo = (char*)malloc(1); 
+27

在C++中你是做的,而不是在C中。 – Marlon

+2

如果你正在编写C代码(你是),那么使用.c扩展名作为文件名,你会很好。 – karlphillip

+0

谢谢大家我会在12分钟内把它作为答案。 – pandoragami

4

回报我想这是使用malloc行。只投的结果,那么 - char *foo = (char*)...

20

C++被设计得更加类型比C安全的,所以你不能(自动)从void*转换另一个指针类型。由于您的文件是.cpp,因此您的编译器需要C++代码,正如前面提到的那样,由于您将char*指定为void*,因此对malloc的调用将无法编译。

如果您将文件更改为.c,那么它会期望C代码。在C中,你不需要在void*和另一个指针类型之间指定一个转换。如果您将文件更改为.c,它将成功编译。

4

那么,你的意图是什么?你想写一个C程序或C++程序吗?

如果你需要一个C程序,那么不要将它编译为C++,也就是说,不要给你的文件“.cpp”扩展名或者明确地要求编译器把你的文件当作C语言。没有投下malloc的结果。我认为这是你需要的,因为你将问题标记为[C]。

如果您需要一个使用malloc的C++程序,那么您别无选择,只能将返回值malloc明确地转换为正确的类型。

相关问题