
Cette question s'adresse aux programmeurs C. Voici mon cas en simplifié :
J'ai une structure qui contient un pointeur vers une chaîne de caractères...
typedef struct MA_STRUCTURE {
---char *str;
} MaStructure;
et une fonction qui remplit la structure, qui prend en argument une chaine de caractère :
MaStructure *MaFonction(const char *s) {
---MaStrcuture *ms = malloc(sizeof(MaStrucuture));
---ms->str = (char *) s;
---return ms;
}
J'ai souvent effectué une conversion de ce genre, et jamais je n'ai eu de problème, en envoyant une chaîne de caractère écrite en dur ou non. Mais à force d'effectuer cette manipulation, je me suis demandé ce qu'il se passerait si jamais je modifiais la chaîne via la structure (chose possible car déclarée comme non-constante).
// faisons-nous plaisir !!
ms->str{2] = 'x';
Et à ma grande surprise, cela marche parfaitement, pas un bug ni de comportement bizarre. Je suis donc allé sur internet voir si des gens utilisaient cette technique, et apparemment, il ne faut surtout pas faire ce genre de chose.
Donc je me demande, pourquoi ? Comment tout cela marche-t-il ?