[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. 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
    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
        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
          oki doki!
          Merci encore killian!
          ^^
          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. Modérateur
              Normalement aucun soucis :-)
              0
              1. Contributeur
                je l'ai eu le strcpy!!! ^^

                Merci encore une fois killian!
                : )
                0