web-dev-qa-db-ja.com

Cでvoidポインターをcharポインターに変換する方法

わかりました、これは私をとても混乱させています。この割り当ての何が悪いのか分かりません:

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

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

なぜ私がこのエラーを受け取っているのか誰にも教えてもらえますか?

エラー:「void *」から「char *」への無効な変換

15
Jimmy

実際には、コンパイラーに問題があるはずです(または、完全な話をしていません)。 void*char*にキャストすることは完全に合法です。さらに、変換はimplicit Cで(C++とは異なり)、つまり、次のコードもコンパイルする必要があります

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

Temp.cというモジュールでコードを試しました。 f1という関数を追加しました。

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

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

Linuxではgcc -c temp.cと入力しましたが、これはエラーや警告なしでコンパイルされました。

どのOSでこれを試していますか?

3
octopusgrabbus