biggil:
C'est une règle de base du C++.
le mot-cléconstn'est pas seulement décoratif, il change le type de la variable:char*etconst char*sont des types différents.Dans ton exemple, tu déclares
char* ptr = "22.5";
Quand il voit le membre de droite "22.5", le compilateur réserve une zone de 5 octets (4c aractères plus le 0 final) dans la zone de DATAS du programme, et il y met '2' '2' '.' '5' '\0'
Par précaution, il voit ça comme un chaîne constante, c-à-d non modifiable. Le type de ce truc est donc const char*.
Puis il voit que tu copies ce pointeur dans un pointeur char*, qui permet de modifier la chaîne.
C'est à dire que que tu peux tenter d'augmenter le longueur de de la chaîne, en faisant pas exemplestrcat ( ptr, "une suite" );Si tu fais ça, la suite va déborder des 5 octets réservés et écraser d'autres données, ce qui va probablement aboutir à un bug, difficile à trouver qui plus est.
Alors le compilo te mets un warning, il est sympa, il te fait confiance - en fait il te dit "tu prends tes responsabilités, je m'en lave les mains".
Le compilateur est ton ami, il est extrèmement intelligent, écoute ce qu'il te dit !
Ok je pense avoir compris. C'est parce que mon char* prend l'adresse de mon const char*. Du coup on a 2 pointeurs qui pointent sur la même zone mémoire dont l'original est un const char* et le suivant un char*.
Il y a effectivement un risque que mon char* puisse modifier la valeur de la zone pointée.
Je vais regarder les exemples de J-M-L plus en détails car je n'ai pas trop compris pour le moment.
Merci