我的代碼段錯誤,我不知道爲什麼。寫入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行,在這裏我要存儲一個char,爲C-字符串(如果我用左值指針引用,這是同樣的問題。)這是什麼他說:
(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 []'和'字符* str'是等價作爲函數參數。 – sepp2k 2009-09-10 14:34:16
你錯了,在參數列表中使用時,char str []會衰減到char *'。 – avakar 2009-09-10 14:35:33
好的....但我是對的,他們在某些情況下是不同的權利?你能否詳細說明在不同的情況下? – Toad 2009-09-10 14:36:23