Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité régulier
    Inscrit en
    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

  2. #2
    Expert Confirmé Sénior Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 031
    Points : 32 201
    Points
    32 201

    Par défaut

    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.

  3. #3
    Membre à l'essai
    Inscrit en
    avril 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : avril 2010
    Messages : 27
    Points : 20
    Points
    20

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •