2011-08-15 15 views
13

numaralı karaktere nasıl çevirirsiniz Okumak bu bana kafa karıştırıcı oldu. Sadece bu atama ile sorun nedir bilmiyorum:Boşluk işaretçisini C

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

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

kimse bana söyleyebilir ben bu hatayı alıyorum neden: derleyici ile yanlış bir şey olmalı

Aslında

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

+6

Bu kod herhangi bir hata üretmeyecektir (uygun içeriği varsayarak). Bu dönüşümler hakkında geçersiz bir şey yok. Bunun gibi hatalar genellikle C++ 'da ptemp = pa' ataması için üretilir (yani cast, C++ derleyicisi). Bir C derleyicisi kullanacağınızı iddia ediyorsunuz ve orada bir açık döküm var. Durumunda böyle bir hata olmayacak. Gerçek kodu gönderin lütfen. – AnT

+1

Hangi derleyici? Bir C derleyici, bir C++ derleyici değil mi? Olduğu gibi, C99 standartları modunda herhangi bir sorun olmadan hukuki C ve 'gcc 'geçecek. –

+1

Bu garip bir hata mesajı ... –

cevap

21

, (ya da tüm hikayeyi anlatmadınız). void*'u char*'a dökmek tamamen yasaldır. Ayrıca, dönüşüm örtük C (C++ aksine), yani aşağıdaki derlemek gerekir olduğu yanı Ben sadece bir modül olarak adlandırılan temp.c. kodunuzu çalıştı

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

g ++ derleyicisini kullanıyorum ve windows visuall C++ 'daki kodu hiçbir sorun olmadan derledim ama g ++ ile bu hatayı aldım – Jimmy

3

F1 adında bir işlev ekledim.

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

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

Linux'ta gcc -c temp.c girdim ve bu hiçbir hata veya uyarı olmadan derlendi.

Hangi OS üzerinde çalışıyorsunuz?

+7

Neden işletim sistemi önemli? –

+0

g ++ 'yi derleyici değil, gcc kullanıyorum. Belki gcc bunun bir sorunu var? – Jimmy

+0

Yanlış derleyiciyi kullandığımdan çok teşekkür ederim – Jimmy

İlgili konular