[C] Erreur de segmentation avec char *
Fermé
vinz
-
5 mai 2007 à 15:11
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 5 mai 2007 à 15:32
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 5 mai 2007 à 15:32
A voir également:
- Erreur de segmentation c
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 38 free ✓ - Forum Mobile
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
1 réponse
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
5 mai 2007 à 15:32
5 mai 2007 à 15:32
Quand tu déclares une chaine de cette manière:
Le système d'exploitation va réserver une zone dans la mémoire avec cette chaine.
Mais cette zone de mémoire aura le statut de "lecture seule". Tu ne peux que lire ces données, tu ne peux donc pas écrire dans cette zone qui est pointée par s.
C'est pourquoi toute chaine en C déclarée avec des guillemets doubles est considérée comme constante.
Il y a des moyens simples pour pallier à ce genre de difficulté:
1) La chaine est toujours constante et stockée en mémoire, mais elle est copiée dans une zone mémoire dans laquelle tu peux écrire.
Cette zone peut être un tableau:
Ou encore:
2) Tu construis ta chaine dans une zone mémoire (prenons toujours un tableau) caractère par caractère:
M'enfin bon là faut le vouloir...
char *s ="ssssssssss";
Le système d'exploitation va réserver une zone dans la mémoire avec cette chaine.
Mais cette zone de mémoire aura le statut de "lecture seule". Tu ne peux que lire ces données, tu ne peux donc pas écrire dans cette zone qui est pointée par s.
C'est pourquoi toute chaine en C déclarée avec des guillemets doubles est considérée comme constante.
Il y a des moyens simples pour pallier à ce genre de difficulté:
1) La chaine est toujours constante et stockée en mémoire, mais elle est copiée dans une zone mémoire dans laquelle tu peux écrire.
Cette zone peut être un tableau:
char s[] = "ssss";
Ou encore:
char s[5] //ne pas oublier une case pour le caractère de fin de chaine '\0'; strcpy(s, "ssss");
2) Tu construis ta chaine dans une zone mémoire (prenons toujours un tableau) caractère par caractère:
char s[] = {'s', 's', 's', 's', '\0'};
M'enfin bon là faut le vouloir...