[C, chaînes de caractères, pointeurs]

Fermé
Faradn Messages postés 56 Date d'inscription samedi 17 janvier 2009 Statut Membre Dernière intervention 5 juin 2011 - 5 juin 2011 à 22:09
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 juin 2011 à 23:12
Bonjour,

Voici le code suivant qui isole mon problème :

#include <stdio.h>

int main(int argc, char** argv) {
 char *a = "hahah";
 printf("%c\n",*a);
 a++;
 *a = 't';
 a--;
 while(*a != '\0') {
 printf("%c",*a);
 a++;
}
printf("\n");
 return 0;
}


Le code plante (mais compile) à cause de la ligne *a = 't';

Pourquoi ? Je pense que c'est vraiment une erreur stupide de ma part mais je ne suis plus suffisamment concentré pour repérer les absurdités éventuelles ...

Merci pour votre aide !

Cordialement,

Faradn

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
5 juin 2011 à 23:12
Bonjour,
char *a = "hahah";
Ceci veut dire que vous déclarez une chaîne constante dans la mémoire qui vaut "hahah" et la variable a pointe sur cette zone (qui est en lecture seule).
Lorsque vous tentez d'écrire sur cette zone, cela plante.
Il faut donc plutôt mettre : char a[]="hahah";
Et là, le reste marchera.

Cdlt,
0