[C++/pointeur] petite question

Fermé
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 - 15 avril 2008 à 17:19
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 - 15 avril 2008 à 19:37
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!! : (

7 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 avril 2008 à 17:53
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
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
15 avril 2008 à 19:05
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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 avril 2008 à 19:13
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
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
15 avril 2008 à 19:20
oki doki!
Merci encore killian!
^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
15 avril 2008 à 19:31
...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
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
15 avril 2008 à 19:32
Normalement aucun soucis :-)
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
15 avril 2008 à 19:37
je l'ai eu le strcpy!!! ^^

Merci encore une fois killian!
: )
0