Partage
  • Partager sur Facebook
  • Partager sur Twitter

strcpy FONCTIONNE PAS!

Sujet résolu
    17 juillet 2010 à 10:48:19

    Bonjour,
    Je suis le tuto de M@teo sur la programmation en C et j'en suis aux chaines de charactères. Je tente de recréer la fonction "strcpy" qui copie une chaine dans une autre. Lorsque ma chaine à copier ne contient que 7 caractères ou moins, ça fonctionne. Lorsqu'elle en prend plus, la copie contient le texte de la chaine a copier suivis de quelques caractères intrus. Quand je démarre le programme, les caractères intrus changent à chaque fois. Voici le code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char* copie(char* copieDeLaChaine, const char* chaineACopier);
    int main(int argc, char *argv[])
    {
        char chaineACopier[] = "Salut toi", copieDeLaChaine[100];
        copie(copieDeLaChaine, chaineACopier);
        return 0;
    }
    char* copie(char* copieDeLaChaine, const char* chaineACopier)
    {
        int i;
        for(i = 0; chaineACopier[i] != '\0'; i++)
        {
            copieDeLaChaine[i] = chaineACopier[i];
        }
        printf("%s", copieDeLaChaine);
        return copieDeLaChaine;
    }
    


    "Salut" aurait été affiché correctement mais "Salut toi" affiche quelque chose du genre "Salut toi/♥xï¤" ". Quand je le repars, il affiche "Salut toiyQEï¤" ".
    Je ne comprends pas... Pouvez-vous m'aider s'il vous plait?
    • Partager sur Facebook
    • Partager sur Twitter
      17 juillet 2010 à 10:51:38

      fais char copideDeLaChaine[100] = {0} avant de faire quoi que ce soit !
      • Partager sur Facebook
      • Partager sur Twitter
        17 juillet 2010 à 10:51:53

        Bonjour,

        ta fonction ne copie simplement pas le caractère de fin de chaine, d'où les anomalies que tu rencontres.
        • Partager sur Facebook
        • Partager sur Twitter
          17 juillet 2010 à 10:54:42

          char* copie(char* copieDeLaChaine, const char* chaineACopier)
          {
              int i = 0;
              int tailleChaine = strlen(chaineACopier);
          
              while (i <= tailleChaine)
              {
                  copieDeLaChaine[i] = chaineACopier[i];
              }
              printf("%s", copieDeLaChaine);
              return copieDeLaChaine;
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            17 juillet 2010 à 10:57:16

            L'appel à la fonction strlen est inutile, la boucle for utilisé par le PO convient très bien.
            • Partager sur Facebook
            • Partager sur Twitter
              17 juillet 2010 à 11:42:39

              Salut,
              Ayant moi aussi des soucis avec ces exercices, je vais essayé de répondre ! :)
              Juste après ta boucle dans la fonction copie, tu as oublié d'ajouté le caractère de fin de chaîne,
              c'est à dire '\0' !
              Un petit oublie qui peut faire mal :colere2: !

              Oups, j'ai voulu aller trop vite, quelqu'un avait déjà donné la bonne réponse :

              Citation : Brugnar


              Bonjour,

              ta fonction ne copie simplement pas le caractère de fin de chaine, d'où les anomalies que tu rencontres.



              Cru$ty
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2010 à 0:06:53

                Merci pour vos réponses. Le fait de rajouter "char copideDeLaChaine[100] = {0}" a réglé le problème. ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2010 à 0:15:14

                  Citation : dagp06

                  Merci pour vos réponses. Le fait de rajouter "char copideDeLaChaine[100] = {0}" a réglé le problème. ;)


                  Attention, ceci est une fausse solution.

                  Ta fonction tel qu'elle est actuellement ne fait pas son travail correctement. Tout comme strcpy, elle doit copier le caractère de fin de chaine.

                  Le fait d'initialiser copideDeLaChaine avec des valeurs nulles ne permet que de masquer le problème.
                  • Partager sur Facebook
                  • Partager sur Twitter

                  strcpy FONCTIONNE PAS!

                  × 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