2011-08-15 35 views
13

好吧,這已經變得讓我感到困惑。我只是不知道什麼是錯的這個任務:你如何將空指針轉換爲C中的字符指針?

void *pa; void *pb; 
char *ptemp; char *ptemp2; 

ptemp = (char *)pa; 
ptemp2 = (char *)pb; 

誰能告訴我爲什麼我收到此錯誤:

error: invalid conversion from ‘void*’ to ‘char*’

+6

此代碼不會產生任何錯誤(假設正確的上下文)。這些轉換沒有任何無效。像這樣的錯誤通常是在C++中爲'ptemp = pa'賦值而產生的(即沒有強制轉換,C++編譯器)。您聲稱正在使用C編譯器,並且您在那裏有明確的轉換。你的情況不會有這樣的錯誤。請發佈真實的代碼。 – AnT

+1

什麼編譯器?它是C編譯器,而不是C++編譯器?現在,你擁有的是合法的C,並且在C99標準模式下沒有任何問題將通過'gcc'。 –

+1

現在,這是一個奇怪的錯誤消息... –

回答

21

實際上,必須有什麼問題你的編譯器(或者你還沒有講完整個故事)。將void*改爲char*是完全合法的。此外,轉換爲隱含在C(不像C++),也就是,以下應編譯以及

char* pChar; 
void* pVoid; 
pChar = (char*)pVoid; //OK in both C and C++ 
pChar = pVoid;  //OK in C, convertion is implicit 
+0

我正在使用g ++編譯器,並且我已經編譯了windows visuall C++上的代碼,但沒有問題,但是使用g ++我得到這個錯誤 – Jimmy

3

我只是想在一個模塊調用temp.c.代碼我添加了一個名爲f1的函數。

void *pa; void *pb; 
char *ptemp; char *ptemp2; 

f1() 
{ 
     ptemp = (char *)pa; 
     ptemp2 = (char *)pb; 
} 

在Linux上,我輸入了gcc -c temp.c,編譯時沒有錯誤或警告。

在哪個操作系統上試用?

+7

爲什麼操作系統很重要? –

+0

我使用g ++作爲編譯器,而不是gcc。也許海灣合作委員會有這個問題? – Jimmy

+0

感謝您使用錯誤的編譯器 – Jimmy