web-dev-qa-db-fra.com

Comment convertir le pointeur void en pointeur char en C

Ok, c'est devenu tellement déroutant pour moi. Je ne sais tout simplement pas ce qui ne va pas avec cette mission:

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

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

Quelqu'un peut-il me dire pourquoi j'obtiens cette erreur:

erreur: conversion non valide de "void *" en "char *"

15
Jimmy

En fait, il doit y avoir quelque chose de mal avec votre compilateur (ou vous n'avez pas raconté toute l'histoire). Il est parfaitement légal de lancer un void* à char*. De plus, la conversion est implicite en C (contrairement à C++), c'est-à-dire que ce qui suit doit également être compilé

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

Je viens d'essayer votre code dans un module appelé temp.c. J'ai ajouté une fonction appelée f1.

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

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

Sous Linux, j'ai entré gcc -c temp.c, et cela a été compilé sans erreurs ni avertissements.

Sur quel OS essayez-vous cela?

3
octopusgrabbus