Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Problème avec une fonction

Comment faire pour que le return envoye une chaine de caractère ?

    22 avril 2006 à 12:21:07

    Bonjour,

    je tente le TP du pendu de M@teo mais j'ai un problème :
    j'aimerais que soit stocké dans un tableau le résultat de la fonction "Motsecret", j'indique donc :
    motsecret[50] = Motsecret();
    (motsecret est défini auparavent), et voici la fonction :
    char Motsecret ()
    {
        char chaine[5] = "ABC";

        return chaine;
    }


    Et bien entendu, ça ne marche pas, j'ai beau chercher je ne trouve pas de solution,
    n'y a-t-il pas moyen de renvoyer un tableau de caractère ou c'est quoi qui me plante ?

    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2006 à 12:29:41

      - Tu ne peux pas renvoyer une variable déclarée dans une fonction (elle est détruite à la fin du bloc).
      - Renvoyer une chaine se fait avec le type char *

      Donc :
      char * Motsecret ()
      {
      char chaine[] = "ABC";
      char * chaine2 = malloc(sizeof chaine);
      strcpy(chaine2,chaine);
      return chaine2;
      }


      Mais il me semble qu'il existe une fonction directe pour faire un malloc + remplissage mais je la trouve plus. (A vérifier aussi que sizeof ici vaut bien 4).

      Attention : l'utilisateur doit alors libérer après l'appel le texte retourné

      Edit : mais si c'est pour renvoyer une chaine constante, autant de faire un
      #define MOT_SECRET "abc"

      et l'utiliser comme ça
      if (!strcmp(mot_tapé,MOT_SECRET))
      {
      //gagné
      }

      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2006 à 12:30:19

        [EDIT] Boulette et Grillé par Kayl
        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2006 à 12:37:05

          Alors là je comprend pas :euh:
          On sait renvoyer une variable d'une fonction a une autre non ?
          Pourquoi il faut faire une autre variable (dynamique c'est ça qu'on dit ?) pour renvoyer du texte o_O
          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2006 à 12:39:47

            Parce qu'ici c'est un tableau.
            Quand il s'agit d'une variable simple comme un entier il est copié au retour de la fonction. Ce n'est pas la même variable (même si la valeur est la même).
            Pour un tableau ça ne marche pas comme ça.
            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2006 à 12:42:29

              Ok mais ça me perturbe parce que je ne crois pas que c'est expliquer dans le cours lol,
              quand tu crées "char * chaine2", c'est un pointeur donc ?
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2006 à 12:43:28

                Je vais peut-être dire une connerie (surement) mais si tu crées la variable motSecret[50] et ensuite tu met motSecret = motSecret(), ça marche pas ?

                EDIT : Le plus simple se serait pas de faire

                char motSecret[50] = NULL;

                motSecret(motSecret);

                et dans la fonction tu met a la fin :

                void Motsecret(char motSecret[])
                {
                char chaine[] = "ABC";
                strcpy(motSecret,chaine);
                }

                ça eviterait d'allouer dymamiquement la chaine et de se casser la tête,non?
                • Partager sur Facebook
                • Partager sur Twitter
                  22 avril 2006 à 14:37:47

                  Citation : rushia

                  Je vais peut-être dire une connerie (surement) mais si tu crées la variable motSecret[50] et ensuite tu met motSecret = motSecret(), ça marche pas ?


                  non.

                  Citation : rushia


                  EDIT : Le plus simple se serait pas de faire


                  /* -ed- ' = NULL' n'a aucun sens pour un tableau... */
                  char motSecret[50] = NULL;

                  motSecret(motSecret);


                  et dans la fonction tu met a la fin :


                  void Motsecret(char motSecret[])
                  {
                  char chaine[] = "ABC";
                  strcpy(motSecret,chaine);
                  }


                  ça eviterait d'allouer dymamiquement la chaine et de se casser la tête,non?


                  Passer l'adresse du premier élément du tableau de char est un bonne solution. Il est prudent de passer aussi la taille du tableau...
                  void Motsecret(char motSecret[], size_t size)

                  Evidemment, ce genre de manip n'a aucun interet si les chaines sont des chaines littérales (il suffisait de retourner leur adresse). Mais elle prend tout son sens si la fonction tire un mot au hasard dans un dictionnaire (une liste de mots dans un fichier texte, par exemple).
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    22 avril 2006 à 14:42:56

                    Merci à vous, je vais essayer de faire comme cela.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [C] Problème avec 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