Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2488 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Renvoi d'un pointeur sur une variable automatique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Renvoi d'un pointeur sur une variable automatique

n°2036116
aurelien_a
Posté le 15-11-2010 à 18:55:13  profilanswer
 

Bonjour,
 
J'ai un problème pour une fonction qui renvoie un pointeur sur une variable automatique.
Le 1er code que j'utilisais est le suivant mais il ne fonctionne pas car ma variable chaine est détruite lors de la sortie.

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char *init_chaine(void)
  6. {
  7.     char chaine[10], *p;
  8.     p = chaine; // Initialisation du pointeur
  9.     strcpy(chaine,"Salut" ); // Remplit la chaine
  10.    
  11.     return p; // Retourne un pointeur sur la chaîne
  12. } // Sortie de la fonction => Destruction des variables locales
  13. int main(void)
  14. {
  15.     char *p;
  16.     p = init_chaine(); // On croit mettre "Salut" dans la chaine
  17.     printf ("%s \n", p); // SURPRISE
  18. }


 
Je travaille sur micro contrôleur et je n'ai pas accès à l'allocation dynamique (malloc). J'utilise donc une variable globale pour ma chaine mais le pointeur retourné est local.
Cela vous parait-il bon ?
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char chaine[10] // chaine est maintenant globale
  6. char *init_chaine(void)
  7. {
  8.      char *p;
  9.     p = chaine; // Initialisation du pointeur
  10.     strcpy(chaine,"Salut" ); // Remplit la chaine
  11.    
  12.     return p; // Retourne un pointeur sur la chaîne
  13. }
  14. int main(void)
  15. {
  16.     char *p;
  17.     p = init_chaine();
  18.     printf ("%s \n", p);
  19. }


 
Merci d'avance.

mood
Publicité
Posté le 15-11-2010 à 18:55:13  profilanswer
 

n°2036117
tpierron
Posté le 15-11-2010 à 19:02:39  profilanswer
 

Moui, c'est correct écrit de la sorte. Faut quand même faire attention, parce que si tu appelles une deuxième fois la fonction init_chaine(), le buffer de ton premier appel va être écrasé (ce qui n'est pas toujours évident à garantir, surtout lorsque les appels de fonctions sont imbriqués sur un paquet de niveau).
 
Pour une meilleure encapsulation, je te conseillerais d'utiliser des variables statiques :
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. char *init_chaine(void)
  6. {
  7.     static char chaine[10] // chaine est maintenant globale
  8.  
  9.     return strcpy(chaine,"Salut" ); // Remplit la chaine
  10. }
  11.  
  12. int main(void)
  13. {
  14.    char *p;
  15.  
  16.    p = init_chaine();
  17.    printf ("%s \n", p);
  18. }


n°2036156
gilou
Modérateur
Modzilla
Posté le 15-11-2010 à 23:19:16  profilanswer
 

Citation :

Pour une meilleure encapsulation, je te conseillerais d'utiliser des variables statiques

Pareil.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2036198
aurelien_a
Posté le 16-11-2010 à 10:10:11  profilanswer
 

Merci de votre aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Renvoi d'un pointeur sur une variable automatique

 

Sujets relatifs
utiliser une variable dans une formule[resolu]allocation dynamique double pointeur passer en parametre
[VBA] Déclaration automatique de tableauxComment modifier le background d'une variable à partir d'une autre
[Oracle] Problème de conversion automatique number->varchar2Affecter à une variable ceux qui est validé dans une combobox - VBA
Segmenter une grosse variable en bouts d'un MoComment renvoyer un formulaire automatiquement
Question simple : destruction variable automatique 
Plus de sujets relatifs à : Renvoi d'un pointeur sur une variable automatique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR