2011-02-24 39 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明確地轉換爲正確的類型。

相關問題