Fonction qui modifie un char * - C - Programmation
Marsh Posté le 13-10-2005 à 09:48:39
ton char * pointe sur une zone mémoire sur lesquelles tu n'as pas les droits en écriture ?
Marsh Posté le 13-10-2005 à 10:06:42
multani a écrit :
|
Le langage C ne garanti pas qu'une chaine de caractère littérale soit modifiable. Tenter de la modifier invoque un comportement indéfini. En d'autres termes, c'est un bug.
char* pouet_str = "pouetpouet"; |
devrait plutôt s'écrire
char const * pouet_str = "pouetpouet"; |
ce qui permet au compilateur de générer au moins des avertissements...
Si tu veux modifier la chaine, il faut utiliser un tableau de char.
char pouet_str[] = "pouetpouet"; |
Marsh Posté le 13-10-2005 à 10:41:26
Emmanuel Delahaye a écrit : Le langage C ne garanti pas qu'une chaine de caractère littérale soit modifiable. Tenter de la modifier invoque un comportement indéfini. En d'autres termes, c'est un bug.
|
D'accord, le compilateur prends la chaine comme un const alors. Je pensais à un truc du genre, mais j'étais pas sur
Emmanuel Delahaye a écrit :
|
J'avais vu quand passant un tableau de char, ça marchait mieux effectivement.
Ok, merci de la précision, je vais pouvoir me démerder maintenant
Marsh Posté le 14-10-2005 à 15:34:56
ReplyMarsh Posté le 14-10-2005 à 15:40:57
ptc07 a écrit : et un ptit malloc sur le char * avant d'écrire dedans ? |
Oui, on peut toujours faire plus compliqué...
Marsh Posté le 14-10-2005 à 15:42:45
ptc07 a écrit : et un ptit malloc sur le char * avant d'écrire dedans ? |
Oui, j'ai testé, et ça marche aussi
Marsh Posté le 14-10-2005 à 16:41:59
ReplyMarsh Posté le 14-10-2005 à 16:59:03
Elmoricq a écrit : Rapport entre memset() et le problème présent ? |
Pour faire encore plus compliqué ?
Marsh Posté le 13-10-2005 à 08:32:12
Salut,
à force de faire des langages de script interprétés, j'en ai perdu mon C
Donc voilà le problème, j'ai besoin d'avoir une fonction a qui on passe une chaine de caractères, et que cette fonction modifie la chaine :
Voilà ce que ça me sort :
sh-3.00$ gcc -o test test.c
sh-3.00$ ./test
pouetpouet
-> p
Erreur de segmentation
sh-3.00$
Bref, ça segfault dès que j'essaie de modifier sintrg[i], et j'avoue ne pas comprendre pourquoi.
Si on pouvait m'expliquer