Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 15/04/2010, 17h09   #1
info21
Invité régulier
 
Inscription : octobre 2008
Messages : 41
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 41
Points : 6
Points : 6
Par défaut adresse de pointeur sur unsigned char

Salut,

Mon probléme ce que j'utilise des bibliothéque qui ne sont pas la mienne et qui impose des types de retour comme vous l'avez vu
voila j'utilise une fonction qui demande

Code :
un pointeur sur unsigned char
j'ai utilisé ce portion de code et ça marche car il demande qu'il se termine par '\0'

Code :
1
2
unsigned char ch2[]="salah";
res=c_fld.PutField(1,sizeof(ch2),ch2);
ça marché mais le probléme :
---- j'utilise une fonction qui demande une adresse sur pointeur sur unsigned char si je ne me trompe pas voila ce que demande en message d'erreur si je ne met pas le type voulu

Code :
1
2
impossible de convertir le paramètre 4 de 'unsigned char [50]' en 'unsigned char *&'
//le type voulu c'est unsigned char *&
voila l'exemple liée a l'erreur citer dessus

Code :
1
2
unsigned char reg[50];
res=tmp_list.GetTemplate(0,typ_tmp,lg_tmp,reg);
Merci de me préciser c'est quoi le type demander

Merci pour votre aide
info21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2010, 17h25   #2
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 396
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 22 396
Points : 32 049
Points : 32 049
Envoyer un message via MSN à Médinoc
Le type demandé est référence C++ sur pointeur.

C'est là qu'on rencontre la différence en tableau et pointeur: Un tableau est implicitement convertible en pointeur, mais n'en est pas un pour autant. Tu ne peux donc pas obtenir d'adresse de pointeur ou de référence de pointeur en pointant sur le tableau.

En clair, je conseillerais ceci pour commencer:
Code C++ :
1
2
unsigned char *reg = NULL;
res=tmp_list.GetTemplate(0, typ_tmp, lg_tmp, reg); //Modifie sans doute reg
Si ça plante à l'exécution, il faudra regarder la doc des fonctions de plus près.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2010, 18h00   #3
bloomenthal
Membre à l'essai
 
Inscription : avril 2010
Messages : 27
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 27
Points : 20
Points : 20
Hello,

Ce type est un type C++, cela n'existe pas en C. (référence sur pointeur de char)

Ensuite, l'erreur de programmation que tu as fait est assez subtile si tu débutes.

Prérequis : il faut que tu apprennes ce que c'est qu'une référence


Ensuite, la chose qu'il faut comprendre, c'est que le nom d'un tableau déclaré ainsi ne désigne pas pas une variable. En fait, c'est un pointeur vers le premier élément de ton tableau, sauf que ... ce pointeur n'existe pas, et c'est là que c'est subtil. Comment est-ce possible ? En fait, la valeur de ce pointeur est déterminée à la compilation grâce au registre de pile, et non à l'éxecution => d'un point de vue bas niveau, il serait redondant, inutile, et plus compliqué de créer une vraie variable pour stocker l'adresse !

Pour comprendre :
Code :
1
2
3
4
5
char tab1[50];
char* tab2 = malloc(50);
 
tab2 = tab1 // valide !
tab1 = tab2 // invalide ! tab1 ne peut pas bouger, puisqu'il n'"existe pas" !
L'erreur de compilation vient du fait que le mécanisme mettant en jeu la référence (le fameux unsigned char*&) dans ton appel de fonction se trouve pris au piège quand tu lui passes un tableau... en fait, le compilo te crie dessus car un passage par référence, ça veut dire implicitement "plus loin dans le code de ma fonction, je vais donner une valeur à mon paramètre", ce qui dans notre cas, reviendrait EXACTEMENT à écrire la ligne "tab1 = tab2" dans le code ci-dessus ! D'ou l'erreur.

Si tu ne comprends pas de suite, c'est peut être normal (et peut-être de ma faute), en tous cas, ce n'est pas forcément évident
bloomenthal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h33.


 
 
 
 
Partenaires

Hébergement Web