мой код segfaults, и я не знаю почему.Запись в c-строку
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, где я хочу, чтобы сохранить символ, в с-строку (если я использую именующее разыменования указателя, это та же самая проблема.) Это то, что он говорит:
(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 & RC книги и это упрощенный пример из главы 2.8 (функция удалить). Я понятия не имею, где проблема.
'символ ул [] и' символ * str' эквивалентны как аргументы функции. – sepp2k
Вы ошибаетесь, 'char str []' распадается на 'char *' при использовании в списке параметров. – avakar
ОК ... Но я прав, что они в некоторых случаях разные. Не могли бы вы уточнить, в каком случае это другое? – Toad