мой код segfaults, и я не знаю почему.
 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  }
Отладчик gdb сообщает мне, что проблема находится в строке 6, где я хочу сохранить char, в c-строку (если я использую разыменование указателя lvalue, это та же проблема). Это то, что он говорит
(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
Я изучаю книгу K & R-C, и это упрощенный пример из главы 2.8 (функция удаления). Я не знаю, где проблема.
