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 :

Fonction retournant une chaine


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut Fonction retournant une chaine
    Bonjour,

    Après une longue absence face au langage C, j'ai un petit probleme avec les pointeurs ...
    J'utilisais Visual studio 2005, qui laissait passer certaines choses, et je viens de passer au 2008 ...

    J'aimerai que la fonction que je teste renvoie un tableau de char
    Le problème c'est que je n'ai rien dans le retour (zz)
    Voilà shematiquement le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    main ()  ...
    char zz[40];
    mef_retour(zz, &today);
     
     
    void mef_retour(char *retour, SYSTEMTIME *today)
    {
    static char d_out[40];
    strcpy_s (d_out, sizeof(d_out), tab_jour2[today->wDayOfWeek]);
    retour=d_out;
    }
    Si quelqu'un peut m'aider et me reffraichir le memoire ...
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    retour est une variable locale qui a reçu une copy de l'argument zz (l'adresse de début du tableau).
    ne fait que modifier la variable locale retour qui d'ailleurs sera détruite en sortie de la fonction.

    Pour modifier zz, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char zz[40];
    mef_retour(zz,sizeof zz, &today);
     
    void mef_retour(char *retour, size_t len, SYSTEMTIME *today)
    {
      strcpy_s (retour, len, tab_jour2[today->wDayOfWeek]);
    }
    La taille maximum du tableau doit passer en argument, sinon, la fonction ne peut pas la connaitre.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Salut,

    Le pointeur "retour" est un objet local. Une fois qu'on quitte la fonction, on ne peut pas récupérer sa valeur depuis l'extérieur.
    En outre, il est préférable de ne pas utiliser d'objets statiques dans les fonctions, c'est pas propre.

    Le mieux, c'est de passer l'adresse d'un tableau à la fonction, afin qu'elle puisse changer la valeur de ses éléments.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void une_fonction(char * tableau , size_t taille_tableau , ... autres parametres ...)
    {
     ...
    }
     
    int main(void)
    {
       char tableau[TAILLE_TABLEAU];
       ...
       une_fonction(tableau , TAILLE_TABLEAU , ... autres parametres ...);
       ...
    }
    EDIT:
    grilled

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    ça fonctionne ...
    Merci à tous !

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

Discussions similaires

  1. fonction qui retourne une chaine de caracteres
    Par pyrrhias dans le forum Débuter
    Réponses: 3
    Dernier message: 20/01/2009, 10h49
  2. Retourner une chaine a une fonction C
    Par insa59 dans le forum C
    Réponses: 20
    Dernier message: 27/03/2007, 16h20
  3. Réponses: 23
    Dernier message: 13/11/2006, 03h33
  4. Réponses: 6
    Dernier message: 14/02/2006, 11h29
  5. fonction retournant une valeur
    Par ryan dans le forum ASP
    Réponses: 4
    Dernier message: 06/09/2004, 17h45

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