Chaines et pointeurs mais pas "const"
Salut,
je suis un peu debutant et je me permet de vous posez cette question :
Code:
1 2
| char* pStr="ABCD";
pStr[0]='x'; // ici : erreur |
ne marche pas et plante sur la modification du 1er octet de la chaine "ABCD"
pourtant je n'ai PAS mis :
Code:
const char* pStr="ABCD";
Là j'aurrai compris, puisqu'il y a le "const"
alors pourquoi ?
merci
Re: Chaines et pointeurs mais pas "const"
Citation:
Envoyé par hpfx
Salut,
je suis un peu debutant et je me permet de vous posez cette question :
Code:
1 2
| char* pStr="ABCD";
pStr[0]='x'; // ici : erreur |
ne marche pas et plante sur la modification du 1er octet de la chaine "ABCD"
pourtant je n'ai PAS mis :
Code:
const char* pStr="ABCD";
Là j'aurrai compris, puisqu'il y a le "const"
alors pourquoi ?
merci
J'ai eu le même problème il y a quelques temps sans comprendre d'ou venait l'erreur et je l'ai finalement comprise lorsque tu écris tu alloues un espace mémoire en lecture seule pointant vers la chaine constante ABCD, autrement dit tu alloues de la mémoire sur laquelle tu ne peux écrire.
Pour arriver à pallier ce "problème" deux alternatives s'offrent a toi :
ou
bien utiliser la fonction strcpy ou strncpy du C.
A bientot!
Re: Chaines et pointeurs mais pas "const"
Citation:
Envoyé par KORTA
... lorsque tu écris
tu alloues un espace mémoire en lecture seule pointant vers la chaine constante ABCD, autrement dit tu alloues de la mémoire sur laquelle tu ne peux écrire.
T'es infos m'on permis de bien progresser, et je me permet de revenir pour pinailler un peu.
quand je fait C'est pas l'espace memoire qui est en lecture seule mais la chaine qui est pointé ("abc" dans mon cas) !
l'espace memoire (pStr lui n'est pas en lecture seulle, tu peux en faire ce que tu veux en fait)
ex :
Code:
1 2
| pStr++; //fait pointer sur le 2eme caractere
printf("%c",*pStr); // donne 'b' |
et d'ailleur j'ai testé, on peu tres bien faire pointer pStr vers une chaine qui n'est pas en lecture seulle, ca marche aussi.
Code:
1 2 3 4 5
|
char *pStr="ha?"; // "ha?" est en lecture seule
char x[5]="xyzt";
pStr=x;
pStr[0]='z'; // ca marche!! |
ca prouve bien que c'est uniquement la chaine "ha?" qui est en lecture seule.
pStr n'est pas en lecture seule, ni intrinsequement ce vers quoi il pointe.
voilà, c'est du pinaillage, je sais, mais bon...
a+
Re: Chaines et pointeurs mais pas "const"
Citation:
Envoyé par hpfx
Citation:
Envoyé par KORTA
... lorsque tu écris
tu alloues un espace mémoire en lecture seule pointant vers la chaine constante ABCD, autrement dit tu alloues de la mémoire sur laquelle tu ne peux écrire.
T'es infos m'on permis de bien progresser, et je me permet de revenir pour pinailler un peu.
quand je fait
C'est pas
l'espace memoire qui est en lecture seule mais la chaine qui est pointé ("abc" dans mon cas) !
l'espace memoire (pStr lui n'est pas en lecture seulle, tu peux en faire ce que tu veux en fait)
ex :
Code:
1 2
| pStr++; //fait pointer sur le 2eme caractere
printf("%c",*pStr); // donne 'b' |
et d'ailleur j'ai testé, on peu tres bien faire pointer pStr vers une chaine qui n'est pas en lecture seulle, ca marche aussi.
Code:
1 2 3 4 5
|
char *pStr="ha?"; // "ha?" est en lecture seule
char x[5]="xyzt";
pStr=x;
pStr[0]='z'; // ca marche!! |
ca prouve bien que c'est uniquement la chaine "ha?" qui est en lecture seule.
pStr n'est pas en lecture seule, ni intrinsequement ce vers quoi il pointe.
voilà, c'est du pinaillage, je sais, mais bon...
a+
Quand Korta parlait d'espace memoire, il ne faisait pas refernce au pointeur mais a l'espace memoire contenant la chaine et pointe par pStr
Re: Chaines et pointeurs mais pas "const"
Citation:
Envoyé par gl
Quand Korta parlait d'espace memoire, il ne faisait pas refernce au pointeur mais a l'espace memoire contenant la chaine et pointe par pStr
J'ai le + grand respect pour ces indications, mais il faisait bien reference au pointeur :
"un espace mémoire en lecture seule pointant vers la chaine constante"
un truc pointant vers qqchose, j'appelle celà un pointeur.
je sais je pinaille encore, c'est juste pour affiner l'information sur la page, je ne cherche pas les coups, mais c'est pour que l'information soit bien clair pour les visiteurs.