2011-08-15 36 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