[C++/pointeur] petite question

Zempachi Messages postés 7472 Date d'inscription   Statut Contributeur Dernière intervention   -  
Zempachi Messages postés 7472 Date d'inscription   Statut Contributeur Dernière intervention   -
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!! : (
A voir également:

7 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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   Statut Contributeur Dernière intervention   906
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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   Statut Contributeur Dernière intervention   906
 
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   Statut Contributeur Dernière intervention   906
 
...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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Normalement aucun soucis :-)
0
Zempachi Messages postés 7472 Date d'inscription   Statut Contributeur Dernière intervention   906
 
je l'ai eu le strcpy!!! ^^

Merci encore une fois killian!
: )
0