我在第5行的错误中遇到了以下代码的问题:
错误:无效转换
void*为char*
我正在使用g ++和codeblocks,我试图将此文件编译为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");
}
Run Code Online (Sandbox Code Playgroud)
kar*_*lip 105
在C++中,你需要转换返回 malloc()
char *foo = (char*)malloc(1);
Run Code Online (Sandbox Code Playgroud)
Mar*_*lon 23
C++的设计是更有型比C安全的,所以你不能(自动)转换从 void* 到另一个指针类型.由于您的文件是a .cpp,您的编译器需要C++代码,并且如前所述,您对malloc的调用将无法编译,因为您正在分配char*a void*.
如果您将文件更改为a,.c那么它将需要C代码.在C中,您不需要在void*其他指针类型之间指定强制转换.如果您将文件更改为a .c,它将成功编译.
那么,你的意图是什么?您要编写C程序还是C ++程序?
如果您需要C程序,则不要将其编译为C ++,即,不要给您文件扩展名“ .cpp”,或明确要求编译器将您的文件视为C。在C语言中,您不应转换结果的malloc。我认为这就是您所需要的,因为您将问题标记为[C]。
如果需要使用的C ++程序malloc,则别无选择,只能将的返回值显式malloc转换为适当的类型。
| 归档时间: |
|
| 查看次数: |
84992 次 |
| 最近记录: |