Avec un compilateur C cela fonctionne également. Lors de l'instruction a = "bonjour", le compilateur alloue automatiquement de la mémoire pour cette chaine de caractère. Ceci est appliquable aux chaine de caractères uniquement.
Cependant cet espace mémoire ne peut être modifié. Je ne sais plus pourquoi, mais il me semble que le compilateur le générant automatiquement, le programmeur n'a pas connaissance de l'adresse de la chaine et il ne peut plus la modifier par la suite. C'est pourquoi il faut déclarer ce type de variable en tant que const: L'écriture correcte serait
const char* a = "bonjour";
Le code suivant génère une erreur de segmentation dû au fait de la modification de la mémoire contenant la chaine allouée par le compilateur
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h>
#include <string.h>
int main() {
char* a;
a = "bonjour";
printf(a);
fflush(stdout);
strcpy(a, "salut");
printf(a);
fflush(stdout);
return 0;
} |
Partager