Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur les chaînes de caractères

Anonyme
    1 mars 2006 à 11:40:39

    Bonjour tout le monde ! Une question me trotte dans la tête : pourquoi est-ce que ce code marche alors que je n'ai pa indiqué la longueur de ma chaîne de caractères ni ajouté de '\0' a la fin, le programme devrait planter non ?? o_O

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

    void testFonction(char *chainette)
    {
      printf("\n%s\n\n", chainette);
    }

    int main(int argc, char *argv[])
    {
      char chaine[5];
      *(chaine + 0) = 'S';
      *(chaine + 1) = 'a';
      *(chaine + 2) = 'l';
      *(chaine + 3) = 'u';
      *(chaine + 4) = 't';
      printf("%s",chaine);
      testFonction(chaine);
      system("PAUSE");     
      return 0;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2006 à 11:48:00

      Normalement, ce qui se produit, c'est que printf vas continuer a lire apprès la chaine, jusqu'a rencontrer '\0'
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        1 mars 2006 à 11:57:58

        Ben ouai, c'est ça le problème : comment l'OS peut savoir que la chaîne s'arrête à 't' ? :euh:
        • Partager sur Facebook
        • Partager sur Twitter
          1 mars 2006 à 13:00:33

          Je suppose que l'IDE le fait automatiquement...
          • Partager sur Facebook
          • Partager sur Twitter
            1 mars 2006 à 17:51:34

            Bonsoir ;

            Je suppose que le \0 est ajouté automatiquement , mais je ne comprends pas quand tu dis

            Citation : shaddowbrr

            je n'ai pa indiqué la longueur de ma chaîne de caractères



            Et ça , o_O ?! :

            char chaine[5];
            • Partager sur Facebook
            • Partager sur Twitter
              1 mars 2006 à 17:58:17

              Citation : PianoPâriss

              Bonsoir ;

              Le \0 est ajouté automatiquement , mais je ne comprends pas quand tu dis

              Citation : shaddowbrr

              je n'ai pa indiqué la longueur de ma chaîne de caractères



              Et ça , o_O ?! :

              char chaine[5];


              Il parle de printf, qui lui ne conais pas la longueur, car il n'a que le pointeur, et ne sais pas combien de place est libérer.
              • Partager sur Facebook
              • Partager sur Twitter
                1 mars 2006 à 18:04:47

                Moi j'ai une explication : non ce n'est pas le compilateur qui fait ça automatiquement.

                En fait, tu as juste du BOL. Il se trouve que *(chaine + 5) contient la valeur 0. Donc le pc s'arrête là.
                Dans ce cas ça marche parce que t'as du bol, dans d'autres cas ça ne marchera pas (peut-être qu'au reboot de ton pc ça ne marchera plus).

                Bref t'as juste du bol, en temps normal ça devrait soit t'afficher n'importe quoi, soit faire planter ton programme. Ni l'un ni l'autre ne sont bons.
                • Partager sur Facebook
                • Partager sur Twitter

                If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                  1 mars 2006 à 18:22:01


                  Désolé , j'avais pas tout à fait compris ce que tu voulais dire .

                  A++

                  PianoPâriss
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    1 mars 2006 à 18:44:51

                    De toute façon, puisque c'est un coup de chance, te poses pas de questions et n'écris jamais ça :D

                    Sinon pour les autres : il a créé un tableau, mais l'OS ne connaît pas en permanence la taille d'un tableau, elle n'est pas "écrite" en mémoire à côté du tableau, d'où l'utilité du \0 qui indique la fin. Ici, le programme pourrait bien afficher des caractères en plus jusqu'à ce qu'il trouve un \0 dans la mémoire. Un \0 n'est ajouté automatiquement que quand on écrit une constante chaîne, c'est à dire une chaîne entre "".
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      1 mars 2006 à 22:21:21

                      Ok merci tout le monde ! :D
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Question sur les chaînes de caractères

                      × 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