[C++/pointeur] petite question

Salut,

voilà une question qui me vient.
quand on fait un :
char * str = "toto";

concrètement, mon pointeur pointe vers le premier char 't'.
Et les autres char se suivent.

Mon souci : est ce que les zone mémoires "allouées" pour ces char 't', 'o', 't', 'o' sont elles protégées?
A priori non car rien ne le garantit.

Dans ce cas on devrait plutôt faire:
char* str = new char[4];
str = "toto";

On est d'accord ou je devrais prendre des vacances le vite possible?

ps: autre question subsidiaire, ls PSG est il vraiment condamné?? SNIF!! : (
--
Ensemble tout devient impossible
Membre fondateur du FJH
Configuration: Windows XP
Firefox 2.0.0.13

7 réponses

  1. Contributeur
    je l'ai eu le strcpy!!! ^^

    Merci encore une fois killian!
    : )
    0
    1. Modérateur
      Normalement aucun soucis :-)
      0
      1. Contributeur
        ...mmmm, si je fais :

        char t = 't';
        char o = 'o';
        
        char* str = new char[4];
        
        *str = t;
        *(str +1) = o;
        *(str +2) = t;
        *(str +3) = o;
        


        ça fonctionne pas??

        0
        1. Contributeur
          oki doki!
          Merci encore killian!
          ^^
          0
          1. Modérateur
            Effectivement, d'ailleurs mis à part le strcpy, il n'y a pas moyen de changer la valeur de ma chaine de caractère str??

            Nan :-)
            Enfin si tu peux le transformer en string.
            0
            1. Contributeur
              Merci killian!

              Pour le string je sais c'est d'ailleurs ce que je fais toujours.
              C'est juste que j'aime me prendre la tête avec les allocations de mémoire! ^^

              char* str = new char[4];
              str = "toto";
              Tu alloues dynamiquement 4 places de char. Ensuite tu écrases l'adresse de cette zone pour faire pointer str vers une autre zone de mémoire qui est en lecture seule. C'est mal :-)


              Effectivement, d'ailleurs mis à part le strcpy, il n'y a pas moyen de changer la valeur de ma chaine de caractère str??

              : )
              0
              1. Modérateur
                En faisant ça

                char * str = "toto";

                Ton str pointe vers une zone mémoire qui est en lecture seule.
                Si tu tentes de remplacer une lettre là dedans, tu vas le sentir passer ;-)

                Quand tu fais ça:

                char* str = new char[4];
                str = "toto";

                Tu alloues dynamiquement 4 places de char. Ensuite tu écrases l'adresse de cette zone pour faire pointer str vers une autre zone de mémoire qui est en lecture seule. C'est mal :-)

                A propos si tu es en C++, tu devrais utiliser des std::string. Avec ça les règles ne sont plus les mêmes et tout est moins compliqué.

                ps: autre question subsidiaire, ls PSG est il vraiment condamné?? SNIF!! : (

                <aimepaslefoot>
                Ca ne me ferait ni chaud ni froid ;-)
                </aimepaslefoot>
                0