Partage
  • Partager sur Facebook
  • Partager sur Twitter

copie de chaine de caractéres dans un tableau

affichage non attendu

    28 mai 2022 à 12:20:08

    Bonjour,

    J'essaie de copier des chaines de caractères, 

    voici le résultat:

    test0test1test2test3

    test1test2test3

    test2test3

    test3

    Problème: je m'attends à ça:

    test0

    test1

    test2t

    test3

    Voici le code: un tableau 2 dimenssions 4 lignes et 5 collones, je copie les chaines dans le tableau.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void)
    {
        int i;
        char dict[4][5]={
                        {0,0,0,0,0},
                        {0,0,0,0,0},
                        {0,0,0,0,0},
                        {0,0,0,0,0},
                        };
        for(i=0; i<4; i++)
        {
            sprintf(dict[i],"test%d",i);
        }
    
        for(i=0; i<4; i++)
        {
            printf("%s\n", dict[i]);
        }
    
        printf("Hello world!\n");
        return 0;
    }
    

    J'ai trouvé: tableau sous-dimenssionné.

        char dict[4][6]={
                        {0,0,0,0,0,0},
                        {0,0,0,0,0,0},
                        {0,0,0,0,0,0},
                        {0,0,0,0,0,0},
                        };



    -
    Edité par assembleur_forever 28 mai 2022 à 12:33:39

    • Partager sur Facebook
    • Partager sur Twitter
    give to get :)
      28 mai 2022 à 13:22:00

      Et oui, il ne faut pas oublier qu'une chaîne de caractère se termine pas le caractère nul '\0'
      • Partager sur Facebook
      • Partager sur Twitter
      ...
        28 mai 2022 à 20:01:06

        Hello,

        Tu n'as vraiment pas besoin d'initialiser dict[][]. Tu en écrases les valeurs plus loin avec ton sprintf().

        • 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

          29 mai 2022 à 1:23:16

          Cependant, il ne faut pas prendre pour acquis que la 6ième case est nulle ('\0')

          edit:
          Contrairement à ce que je pensais, sprintf ajoute une fin de chaîne:
          -
          #include <stdio.h>
          int main(void) {
              char line[10];
              for(int i=0; i<9; i++) line[i] = '*';
              printf("%s\n", line);
              sprintf(line, "%s%d", "test", 4);
              printf("%s\n", line);
          }
          -
          *********
          test4

          -
          Edité par PierrotLeFou 29 mai 2022 à 3:16:23

          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            29 mai 2022 à 16:37:51

            @Pierrot: tu as pris un risque avec ton printf() ligne 5: tu ne sais pas ce que contient line[9]. Apparemment, par chance, un 0 .
            • 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

              29 mai 2022 à 17:06:20

              J'ai écrit:
              > Cependant, il ne faut pas prendre pour acquis que la 6ième case est nulle ('\0')
              Je n'ai pas suivi mes propres consignes. :)
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                29 mai 2022 à 19:44:41

                PierrotLeFou a écrit:

                Je n'ai pas suivi mes propres consignes. :)

                May God protect you ! :lol:

                -
                Edité par edgarjacobs 29 mai 2022 à 19:48:34

                • 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

                copie de chaine de caractéres dans un tableau

                × 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