Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer une chaine de caractère d'une fonction

    24 juin 2019 à 15:42:42

    Bonjour, j'ai un gros problème

    J'ai une fonction dans laquelle je crée une chaine de caractère donc stocker dans un tableau. Seulement voilà je ne sais pas comment faire pour récupérer ce tableau dans mon main.

    Voici à quoi mon code ressemble :

    int main(void){
    char message[]="";
    scrpy(message,fonction_message());
    
    return 0;
    }
    
    char function_message(){
    char form_mess[]=""
    /* code */
    return form_mess;
    }

    Comment faire svp, c'est vraiment embêtant, je n'y arrive pas.

    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2019 à 16:36:02

      Hello,

      Un festival d'erreurs dans ces quelques lignes.

      • Ligne 2: déclarer un tableau de cette manière ne va réserver qu'un octet pour le tableau, soit juste la place pour mettre le \0. Une écriture correcte serait char msg[N]=""; qui va réserver N positions pour msg, et l'initialiser à zéro
      • Ligne 8: telle que déclarée là, ta fonction ne renvoie qu'un char, par un char *
      • Ligne 9: évidemment le même problème que ligne 2
      • Ligne 11: une fonction est incapable de renvoyer un tableau. Il va te falloir une autre méthode. Deux des plus classiques: soit passer le tableau à remplir à la fonction
        #include <stdio.h>
        
        int main(void) {
            char str[....];
        
            fct(str);
            puts(str);
        
            return(0);
        }
        
        void fct(char *str) {
            strcpy(str,"....");
        }
        soit passer par l'allocation dynamique
        #include <stdio.h>
        #include <stdlib.h>
        
        #define N 256    // par exemple
        
        int main(void) {
            char *str;
        
            str=fct();
            puts(str);
            free(str);
        
            return(0);
        }
        
        char *fct(void) {
            char *s;
        
            s=malloc(N);
            strcpy(s,"....");
        
            return(s);
        }

      -
      Edité par edgarjacobs 24 juin 2019 à 16:42:59

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        24 juin 2019 à 16:42:22

        Ton code est bourré d'erreur !

        1) scrpy inconnue au bataillon !

        2) idem pour fonction_message !

        3) manque un point virgule !

        4) le type de la variable retournée par function_message ne correspond pas à la déclaration.

        5) Attention, une fonction ne devrait pas retourner l'adresse d'une variable locale de la dite fonction. 

        Essais de faire un effort !

        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2019 à 9:24:24

          Lol excusez-moi. Je voulais faire un simple exemple avec le moins d'info et donc le moins de faute mais il semblerait que le résultat fut l'inverse.

          @edgarjacobs Merci je vais essayer l'un des codes que tu m'as fourni.

          Quelle est la différence entre un char et char* ? J'ai jamais vraiment compris comment fonctionnait les pointeurs. Dans le cas présent, c'est bien un pointeur non?

          Edit : j'ai utilisé ta première méthode et elle fonctionne bien. Merci beaucoup !

          -
          Edité par YIRO 25 juin 2019 à 9:56:59

          • Partager sur Facebook
          • Partager sur Twitter
            25 juin 2019 à 10:10:05

            YiroKafaloKarl-Marx a écrit:

            Quelle est la différence entre un char et char* ? J'ai jamais vraiment compris comment fonctionnait les pointeurs. Dans le cas présent, c'est bien un pointeur non?

            Tu veux faire du parachutisme, mais tu ne maîtrises pas le concept de parachute. Fais attention, ça risque de faire mal à l'arrivée!
            Le concept du pointeur est fondamental en C. Ça à l'air complexe, mais c'est très simple une fois que l'on a compris. Mais doit impérativement comprendre, ça ne doit surtout pas rester approximatif.
            • Partager sur Facebook
            • Partager sur Twitter

            En recherche d'emploi.

              25 juin 2019 à 10:30:20

              Selon le contexte et l'utilisation de ta fonction, tu pourrais aussi déclarer ton tableau comme étant 'static'

              char *fct(void)
              {
                static char buf[BUFSIZ];
              
                // ...
              
                return buf;
              }



              • Partager sur Facebook
              • Partager sur Twitter
                25 juin 2019 à 14:28:47

                Dalfab a écrit:

                YiroKafaloKarl-Marx a écrit:

                Quelle est la différence entre un char et char* ? J'ai jamais vraiment compris comment fonctionnait les pointeurs. Dans le cas présent, c'est bien un pointeur non?

                Tu veux faire du parachutisme, mais tu ne maîtrises pas le concept de parachute. Fais attention, ça risque de faire mal à l'arrivée!
                Le concept du pointeur est fondamental en C. Ça à l'air complexe, mais c'est très simple une fois que l'on a compris. Mais doit impérativement comprendre, ça ne doit surtout pas rester approximatif.


                Très bien merci beaucoup

                @magma oui c'est pas faux

                • Partager sur Facebook
                • Partager sur Twitter
                  25 juin 2019 à 19:42:56

                  Si tu ne maitrises pas ce qu'est un pointeur, je te conseille d'aller lire un tuto C de toute urgence :)

                  https://zestedesavoir.com/tutoriels/755/le-langage-c-1/1043_aggregats-memoire-et-fichiers/4277_les-pointeurs/

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Récupérer une chaine de caractère d'une fonction

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown