mes codes segfaults et je ne sais pas pourquoi.Écriture dans c-string
1 #include <stdio.h>
2
3 void overwrite(char str[], char x) {
4 int i;
5 for (i = 0; str[i] != '\0'; i++)
6 str[i] = x;
7 }
8
9 int main(void) {
10 char *s = "abcde";
11 char x = 'X';
12 overwrite(s, x);
13 printf("%s\n", s);
14 return 0;
15 }
Le débogueur gdb me dit, ce problème est sur la ligne 6, où je veux stocker un char, en c-string (si j'utiliser un pointeur lvalue déréférencement, ce problème est le même.) Voilà ce que il dit:
(gdb) run
Starting program: /tmp/x/x
Breakpoint 1, overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:5
5 for (i = 0; str[i] != '\0'; i++)
(gdb) s
6 str[i] = x;
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x080483e3 in overwrite (str=0x8048500 "abcde", x=88 'X') at x.c:6
6 str[i] = x;
(gdb) q
J'apprends de K & livre RC et cet exemple est simplifié du chapitre 2.8 (la fonction de suppression). Je n'ai aucune idée d'où est le problème.
'char str [] 'et' char * str' sont équivalentes comme arguments de la fonction. – sepp2k
Vous avez tort, 'char str []' se désintègre en 'char *' lorsqu'il est utilisé dans une liste de paramètres. – avakar
ok .... Mais je suis juste qu'ils sont différents dans certains cas, non? Pourriez-vous préciser dans quel cas c'est différent? – Toad