我在下面的代码中遇到了问题,在第5行出现了错误:
错误:从void*
到char*
的转换无效
我正在使用带有代码块的g++,我尝试将这个文件编译为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");
}
在C++中,您需要强制转换malloc()
的返回值
char *foo = (char*)malloc(1);
C++被设计成比C更安全的类型,因此您不能(自动)从void*
转换为另一种指针类型。 由于您的文件是.cpp
,因此编译器需要C++代码,并且正如前面提到的,您对malloc的调用将不会编译,因为您正在将char*
分配给void*
。
如果您将文件更改为.C
,那么它将需要C代码。 在C语言中,不需要在void*
和另一个指针类型之间指定强制转换。 如果您将文件更改为.c
,它将成功编译。
我猜这是马洛克的台词。 只需强制转换结果,然后-char*foo=(char*)...