Partage
  • Partager sur Facebook
  • Partager sur Twitter

a propos des arguments de strlen

Sujet résolu
    1 février 2006 à 23:00:03

    Salut les ZerOs!
    voila j'ai lu le nouveau cours sur les chaines de caracteres, et il y a un detail qui m'intrigue: on explique que le prototype de la fonction strlen est :
    strlen(const char* chaine)
    , j'ai fait quelque experiences pour en arriver a observer que ca ne marchait pas si chaine n'etait pas un pointeur, alors je me demande comment ce fait-ce? (ce qui ont l'esprit mal tourne y verront un (fin) jeu de mot ^^ ), pourqoi ca ne marche que si on met un pointeur, alors qu'on a mit la variable de la valeur desiree comme argument lorsqu'on a appele la fonction... Voila, c'est tres embrouille, alors si vous pouvez comprendre et en plus repondre, surtout de vous en privez pas!
    merci d'avance....
    • Partager sur Facebook
    • Partager sur Twitter
      1 février 2006 à 23:09:51

      Tu peux donner un cas où ça ne "marche pas" ? oO
      char *str = "lala";
      char str[] = "lala";

      Ce sont les deux seuls cas possibles, et ils marchent tous les deux avec strlen.
      • Partager sur Facebook
      • Partager sur Twitter
        1 février 2006 à 23:25:54

        Si tu veux, un tableau de caractères (chaîne) est une sorte de pointeur qui pointe vers divers char (qui correspondent à chaine[n], chaine[n+1], etc). Je crois que le principe est expiqué dans le cours de M@theo.
        • Partager sur Facebook
        • Partager sur Twitter
          1 février 2006 à 23:36:51

          En fait, ce n'est pas particulier a strlen, (comment expliquer? :-° )A voila, j'ai fait un petit proramme pour mettre ceci en evidence:
          #include <stdlib.h>
          #include <stdio.h>

          int fonction (char* chaine);

          int main()
          {
              char chaine[] = "truc";
              fonction(chaine);
              getchar();
              return 0;
          }

          int fonction (char* chaine)
          {
              printf("%s", chaine);
              return 0;
          }
          ceci fonctionne, mais il FAUT mettre un pointeur dans l'argument de "fonction", si on met un char tout bete, on a l message suivant:" invalid conversion from 'char' to 'char' ". Mais si je fais maintenant le programme suivant:
          #include <stdlib.h>
          #include <stdio.h>

          int fonction (int truc);

          int main()
          {
              int truc = 25;
              fonction(truc);
              getchar();
              return 0;
          }

          int fonction (int truc)
          {
              printf("%d", truc);
              return 0;
          }
          Ceci fonctionne, alors que contrairement au precedant programme, je n'ai pas mis de pointeur dans l'argumment de "fonction", donc je m'etonne de ne pas avoir un message genre " invalid conversion from int 'int' to 'int' "

          :colere: Et c'est en ecrivant ces mots que je comprend mon erreur... c'est en fait parce qu'il s'agit d'un tableau et non d'un char simple, le programme suivant transmet lui un char simple et n'utilise pas de pointeur:
          #include <stdlib.h>
          #include <stdio.h>

          int fonction (char chaine);

          int main()
          {
              char chaine = 't';
              fonction(chaine);
              getchar();
              return 0;
          }

          int fonction (char chaine)
          {
              printf("%c", chaine);
              return 0;
          }

          Donc en resume, les tableau doivent etre transmits entre les fonction uniquement par des pointeurs, et je suis desole d'avoir fait un topic pour rien... enfin j'espere que si quelqu'un a le meme probleme, il tombera sur ce post et qu'il comprendra... Merci quand meme!

          PS a je viens de me souvenir d'un code qui transmettait un tableau sans pointeurs ^^ :
          #include <stdlib.h>
          #include <stdio.h>

          int fonction (char chaine[]);

          int main()
          {
              char chaine[] = "truc";
              fonction(chaine);
              getchar();
              return 0;
          }

          int fonction (char chaine[])
          {
              printf("%s", chaine);
              return 0;
          }


          EDIT et donc sans m'en rendre compte, je viens de reprendre la reponse de Elentar:

          Citation : Elentar

          char *str = "lala";
          char str[] = "lala";

          • Partager sur Facebook
          • Partager sur Twitter
            1 février 2006 à 23:44:16

            Dans ton dernier code tu transmet un pointeur ^^

            chaine[] est en faite un pointeur sur le premier element du tableau !!
            • Partager sur Facebook
            • Partager sur Twitter
              2 février 2006 à 0:04:18

              C'est un pointeur?? a d'accord, moi je ne conaissait que les pointeur avec les petites etoiles, c'est pour ca ^^
              donc il pointe sur le premier element du tableau, mais comme c'est une chaine de caractere, il l'affiche entierement, c'est ca?
              • Partager sur Facebook
              • Partager sur Twitter

              a propos des arguments de strlen

              × 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