IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Passage de pointeur en parametre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut Passage de pointeur en parametre
    Bonjour,

    Voila j'ai une fonction à laquelle je donne en argument un pointeur initialisé à NULL. J'aimerais que de la mémoire lui soit allouée à l'intérieur de la fonction, que le contenu de cette mémoire soit également rempli à l'interieur de la fonction. Et lorsque je me retrouve dans mon programme appelant, que je puisse récupérer le contenu de là où pointe le pointeur.

    j'ai fait la chose suivante :

    programme appelant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char *bufferDest=NULL;
    
    x_lec_art_cle_dta(....,bufferDest);   
             //parametre de type LPSTR
    fonction appelée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int _stdcall X_LEC_ART_CLE_DTA(....,LPSTR dest)
    {
         ....
         dest = calloc(10,1);
         strcpy(dest,"salut");
         .....
    }
    Mais ça ne fonctionne pas

    Lors du debugage je me suis aperçu de la chose suivante :
    - initialisation à NULL du pointeur :
    bufferDest : @0012FAC4 --> NULL
    - appel de la fonction :
    dest : @0012FA88 --> NULL
    - allocation de mémoire :
    dest : @0012FA88 --> 008F3CBC "\0"
    - copie de la chaine "salut" :
    dest : @0012FA88 --> 008F3CBC "salut\0"
    - retour à la fonction appelante :
    bufferDest : @0012FAC4 --> NULL

    preuve que ça ne marche pas....Est-il donc possible de passer en parametre à une fonction un pointeur NULL, et qu'au retour de la fonction, le pointeur pointe vers une zone mémoire alloué....?

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Comme d'hab : En C le passage de paramètre se fait par VALEUR, c'est-à-dire qu'on donne une valeur, tu peux modifier cette valeur dans le corps de ta fonction mais au sortir de la fonction, le paramètre reprend sa valeur initiale.

    Donc pour que la valeur d'une variable soit modifiée, il faut passer son adresse, et là ça fonctionne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char *bufferDest=NULL;
     
    x_lec_art_cle_dta(....,&bufferDest);   
             //parametre de type LPSTR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int _stdcall X_LEC_ART_CLE_DTA(....,LPSTR *dest)
    {
         ....
         *dest = calloc(10,1);
         strcpy(*dest,"salut");
         .....
    }
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 77
    Par défaut
    ça fonctionne bien, merci de ton aide..

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cout
    Voila j'ai une fonction à laquelle je donne en argument un pointeur initialisé à NULL. <...> Est-il donc possible de passer en parametre à une fonction un pointeur NULL, et qu'au retour de la fonction, le pointeur pointe vers une zone mémoire alloué....?
    Bravo ! Tu as découvert que les passages de paramètres se faisaient par valeur en C.

    La réponse est non.

    Comme toujours en C, si tu veux qu'un fonction modifie une variable extérieure, il faut
    • soit passer l'adresse de la variable (et ça vaut aussi pour les pointeurs qui sont des variables comme les autres),
    • soit utiliser la valeur retournée par la fonction (voir malloc(), fopen()...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage de structure en parametre fonction : Pointeur
    Par apicard3 dans le forum Débuter
    Réponses: 5
    Dernier message: 30/10/2013, 08h29
  2. Passage tableau string en parametre par pointeur
    Par andrebernard dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/03/2011, 11h10
  3. Passage d'un pointeur en parametre
    Par vandamme dans le forum C++
    Réponses: 3
    Dernier message: 15/06/2008, 22h10
  4. Problème passage de pointeur
    Par mick74 dans le forum MFC
    Réponses: 2
    Dernier message: 21/04/2004, 18h34
  5. [allegro]passage de pointeur sur image
    Par Gonath dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/12/2003, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo