Partage
  • Partager sur Facebook
  • Partager sur Twitter

Peut-on retourner une chaine de caracteres ?

    15 avril 2006 à 18:23:35

    Bonjour,

    J'avais survolé un topic parlant de ça (retourner une chaine de caractères) et je crois me rapeller qu'on ne peut pas. J'ai essayé de retrouver ce topic avec la fonction Recherche du site mais je n'ai rien trouvé à pars une explication donné par Matéo je crois dans la solution du TP mais comme je ne veux pas voir la réponse j'ai vite fermé les yeux :p .

    Pouvez-vous me confirmer (ou alors démentir ce que j'ai dit) à propos des renvois des chaines de caractères ? Et m'expliquer comment contourner le problème si l'on ne peux pas renvoyer une chaine de caracteres. Merci d'avance de votre aide ;) .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 avril 2006 à 18:26:06

      Pour retourner une chaine de caractère, tu appelle la fonction avec, en paramètre, la chaine a modifier, et avec la fonction tu modifie (les tableau fonctionnent comme les pointeurs)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        15 avril 2006 à 18:28:55

        On ne peut pas retourner un tableau.
        On ne peut pas non plus retourner l'adresse d'une variable locale, c'est à dire que si on crée une chaîne dans une fonction, la chaîne est détruite automatiquement à la sortie de sa fonction. Si on retourne son adresse, elle ne correspond donc plus à la chaîne, et erreur.

        On peut créer une structure contenant une chaîne et retourner cette structure, mais c'est un peu lourd.
        La méthode la plus simple et la plus utilisée est de passer à la fonction un emplacement assez grand pour y stocker la nouvelle chaîne.
        Sinon, mais c'est un peu risqué, on peut faire un malloc dans la fonction et retourner l'adresse, mais il faut pas oublier de free après.
        • Partager sur Facebook
        • Partager sur Twitter
          15 avril 2006 à 18:40:55

          En fait j'ai une fonction qui prend en parametre le mot à trouver pour le Pendu (donc c'est une chaine de caracteres), dans cette fonction je crypte le mot en remplaçant chaque lettre par un '*' sauf la lettre choisi par l'utilisateur, ce qui fait que si le mot est BLADEEE et que l'utilisateur choisi la lettre E, je voudrais que ma chaine de caracteres à la fin de la fonction soit ****EEE et j'aurais voulu la retournée comme ça je peux la reutiliser pour toutes les lettres choisis par le joueur mais apparement on ne peut pas...

          Citation : louisclem

          La méthode la plus simple et la plus utilisée est de passer à la fonction un emplacement assez grand pour y stocker la nouvelle chaîne.



          Je ne vois pas comment faire o_O

          Voici le modèle de ma fonction :

          void crypterMot(char motATrouver[TAILLE_MAX], long tailleMot, char caractereJoueur)
          {
              long i;
              char caractereACrypter;

              for (i = 0; i<tailleMot; i++)
              {
                  if (caractereJoueur != motATrouver[i])
                  {
                          caractereACrypter = motATrouver[i];
                          caractereACrypter = '*';
                          printf("%c", caractereACrypter);
                  }
                  else
                  {
                          printf("%c",caractereJoueur);
                  }
              }
                  printf("\n");

          }


          D'après ce que j'ai compris il faut que je mette un autre paramètre à ma fonction où sera stocké le mot crypté...?
          • Partager sur Facebook
          • Partager sur Twitter
            15 avril 2006 à 18:55:25

            Citation : Bladeee

            Citation : louisclem

            La méthode la plus simple et la plus utilisée est de passer à la fonction un emplacement assez grand pour y stocker la nouvelle chaîne.



            D'après ce que j'ai compris il faut que je mette un autre paramètre à ma fonction où sera stocké le mot crypté...?


            Exactement. Essaye, ça mord pas ! C'est un peu comme une fonction de copie de chaine.
            strcpy (char *des, char const *src);

            sauf que la copie est un peu plus complexe...
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
            Anonyme
              15 avril 2006 à 19:05:54

              Déja deux petites remarques : tu n'as pas besoin du TAILLE_MAX dans le passage d'arguments, ni du tailleMot puisque la chaîne se termine par un '\0'. Je te mets un début de code, après j'ai pas tout compris ce que tu voulais faire :D mais d'après cette fonction, tu peux modifier la chaîne nouveauMot.

              /* Prototype. */
              void crypterMot(char motATrouver[], char nouveauMot[], char caractereJoueur)
              /* Appel. */
              char motATrouver[20] = "test";
              char nouveauMot[20];
              char caractereJoueur = 'C';
              ..
              crypterMot(motATrouver, nouveauMot, char caractereJoueur);
              • Partager sur Facebook
              • Partager sur Twitter
                15 avril 2006 à 19:15:06

                Ok merci beaucoup de votre aide, je m'y mettrais ce soir je pense ou demain puisque là je dois partir ;)
                • Partager sur Facebook
                • Partager sur Twitter

                Peut-on retourner une chaine de caracteres ?

                × 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