Partage
  • Partager sur Facebook
  • Partager sur Twitter

question basigue sur les chaine de caracteres et arguments du main

Sujet résolu
    21 novembre 2007 à 13:58:48

    Salut a tous,
    il y a quelque chose que je ne parviens pas a saisir sur les chaines de caracteres - merci pour vos eclaircissements intelligents :)
    Voici un tout petit programme:
    1. #include <iostream>
    2. using namespace std ;
    3. int main(int argc, char **argv)
    4. {
    5.         cout << "argv[0] = " << argv[0] << endl;// argv[0] = CWD
    6.         system("PAUSE") ;
    7.         return 0;
    8. }


    Je n'arrive pas a comprendre ceci: d'apres ce que j'ai compris sur les chaines de caracteres et les parametres du main, la variable suivante:
    1. argv[0]

    est un pointeur vers une chaine de caracteres (en l'occurence mon repertoire de travail) et de ce fait, il doit donc contenir l' adresse de cette chaine de caractere. donc en faisant un cout:
    1. cout << "argv[0] = " << argv[0] << endl;

    je m'attends a obtenir l'adresse de la chaine de caractere et non pas la chaine de caractere elle meme! !!
    Voila, voila... c'est ce que je n'arrive pas a saisir: pourquoi
    1. argv[0]

    me retourne une chaine de caractere et non pas une adresse?
    Merci pour votre aide!

    PierreB


    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      21 novembre 2007 à 14:03:48

      C'est bel et bien une adresse qui t'es retourné. Mais cette adresse est interprétée comme une chaîne (étant donné que c'est l'adresse du premier élément de cette chaîne). Je crois que tu peux aussi faire 'argv[0][0]' pour y accéder. (me suis trompé)
      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2007 à 14:16:27

        Salut hiura,

        J'ai essaye ce que tu m'as conseiller de faire:
        1. cout << "argv[0][0] = " << argv[0][0] << endl;

        on obtient le premier element de la chaine de caracteres (c'est a dire C! - etant donne que mon repertoire courant est C:/program/...).
        ca n'a pas l'air d'etre ca!

        PierreB
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          21 novembre 2007 à 14:31:02

          Alors je me suis trompé pour ce détail.
          Je viens de me souvenir : c'est '&argv[0][0]'. (On récupère l'adresse.)
          • Partager sur Facebook
          • Partager sur Twitter
            21 novembre 2007 à 14:49:11

            Salut hiura et merci pour ton aide! mais ca ne marche toujours pas!
            en codant:

            1. cout << "argv[0][0] = " << &argv[0][0] << endl


            j'obtiens encore (?!??!) le repertoire courant!

            PierreB
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              21 novembre 2007 à 15:07:04

              ça affiche le répertoire courant? alors c'est juste. Sous windows, le premier argument donné à tous les programmes est le répertoire courant.
              • Partager sur Facebook
              • Partager sur Twitter
                21 novembre 2007 à 15:29:27

                parce que cout (enfait ostream) prend pour acquis que lors qu'on lui envoi un char* c'est qu'on veut afficher la chaine jusqu'au premier octet null.

                Tu peux facilement faire un reinterpret_cast<void*> si tu veux afficher l'adresse
                • Partager sur Facebook
                • Partager sur Twitter
                  21 novembre 2007 à 16:35:46

                  MatteX Salut,

                  je te paraphrase pour bien voir si j'ai bien compris :)
                  donc si j'envoie un pointeur sur un char a cout, il m'affiche toute la chaine jusqu'au 1er octet nul - c'est bien ca?

                  Par contre j'ai rien compris a ce que tu m'as ecris sur reinterpret_cast<void*> - ca veut dire quoi en clair (sur mon code, qu'est ce qu'il faut que je fasse?) ?!?! o_O
                  j'aimerai vraiment comprendre!...

                  merci pour ton aide!

                  PierreB
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 novembre 2007 à 16:39:16

                    pour le char* oui, cout s'attend à une chaine de caractère C.

                    pour le reinterpret_cast<void*> en clair ça donne :

                    1. std::cout << reinterpret_cast<void*>( argv[ 0 ] ) << std::endl;


                    À utiliser que dans de rares cas... il est déjà rare et inutile de vouloir afficher l'adresse d'un pointeur.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 novembre 2007 à 16:43:04

                      Super!... merci pour les explications :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      question basigue sur les chaine de caracteres et arguments du main

                      × 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