Partage
  • Partager sur Facebook
  • Partager sur Twitter

my_fonction manip de chaine...

bug...

    22 juillet 2006 à 16:39:03

    Voila je viens de lire le tuto sur les chaines de caractere, et suite au conseil de Maeto qui nous dit de nous exercer à réecrire des fonction de manipulation de chaine, j'ai essayé de faire celle de la copy (strcpy) mais j'ai un bug :

    #include <stdio.h>
    #include <stdlib.h>

    char* my_str(char* copieDeLaChaine, const char* chaineACopier);

    int main(int argc, char *argv[])
    {
        char mot[100], copy[100];
       
        printf("Entrez votre mot à copier \n");
        scanf ("%s", mot);
       
        printf("Le mot saisi est : %s \n", mot);
       
        my_str(copy, mot);
       
        printf ("Le mot est : %s \n", mot);
        printf ("La copy est : %s \n", copy);
       
       

       
     
      system("PAUSE");     
      return 0;
    }

    char* my_str(char* copieDeLaChaine, const char* chaineACopier) {
         
          int i, j;
          char chaine_temp[100]={0};
         
          i=0;
         
          chaine_temp[i]=chaineACopier[i];
         
          while (chaine_temp[i] != "\0") {
                i++;
               
                chaine_temp[i]=chaineACopier[i];
               
                }
               
                for (j=0;j<=i;j++) {
                   
                    copieDeLaChaine[j]=chaine_temp[j];
                   
                    }
                   
                    return copieDeLaChaine;
                }
               
         


    Voila voyez vous l'erreur??
    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2006 à 16:56:15

      J'ai bidoué un peu ton code, et le résultat ..... marche :D :
      #include <stdio.h>
      #include <stdlib.h>

      void my_str(char* copieDeLaChaine, const char* chaineACopier);

      int main(int argc, char *argv[])
      {
          char mot[100] = {0}, copieDuMot[100] = {0};
         
          printf("Entrez votre mot a copier : ");
          scanf ("%s", mot);
          printf("Le mot saisi est : %s \n", mot);
          my_str(copieDuMot, mot);
          printf ("La copie est : %s \n", copieDuMot);
         
          system("PAUSE");     
          return 0;
      }

      void my_str(char* copieDeLaChaine, const char* chaineACopier)
      {
          int i = 0;
         
          for (i = 0; i <= strlen(chaineACopier); i++)
          {
                copieDeLaChaine[i]= chaineACopier[i];
          }
      }

      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2006 à 17:03:58

        @mista-flow
        Ton code est un peu trop compliqué mais correct dans l'idée. L'erreur qui fait que ton programme ne fonctionne pas est la suivante :
        while (chaine_temp[i] != "\0")

        Tu ne peux pas comparer un caractère avec une chaine.
        Il te faudrait écrire :
        while(chaine_temp[i] != '\0')
        avec les simple quote au lieu des doubles. Dans ce que tu écrits le probleme est que tu compares un entier(char si tu préfere) avec un pointeur.

        Si je peux te donner un conseil, demande à ton compilateur de compiler avec l'option -Wall qui te permet d'afficher ce genre de comparaisons "interdites" :

        warning: comparison between pointer and integer

        • Partager sur Facebook
        • Partager sur Twitter
          22 juillet 2006 à 17:08:05

          Et t'as pas vu le code :
          chaine_temp[i]=chaineACopier[i];

          Avant la boucle, ça signifie que :
          chaine_temp[0]=chaineACopier[0];

          Pourquoi ne pas mettre cela avec la boucle?
          (Code corrigé au-dessus)
          • Partager sur Facebook
          • Partager sur Twitter
            22 juillet 2006 à 17:10:53

            Parcequ'il incrémente dans sa boucle avant le premier assignement. C'est bizar mais ca ne rend pas le code faux pour autant.
            • Partager sur Facebook
            • Partager sur Twitter
              22 juillet 2006 à 17:31:06

              ok merci pour vos reponse ça marche, il fallait donc mettre des quotes simples (lol j'allais jamais trouver). :)
              • Partager sur Facebook
              • Partager sur Twitter

              my_fonction manip de chaine...

              × 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