我複製了一些代碼,它只是將一個文件讀取到一個字符串並從舊程序中打印字符串。它工作正常,所以我決定修改一下。新方案是賦值給變量給出完全不相關的函數中的段錯誤
#include <stdio.h>
#include <string.h>
int main() {
FILE *itemlist = fopen("itemlist", "r");
char *currentstring, charbuffer[2];
// char itemstart = 0;
while (fgets(charbuffer, 2, itemlist)) {
strcat(currentstring, charbuffer);
}
printf("%s", currentstring);
return 0;
}
而且它按預期工作。但是,當我取消註釋itemstart
行時,它會出現分段錯誤。我甚至沒有使用它,就我而言,初始化char爲0並不違法。我認爲這是一個類型的問題,然後我把它改爲short,然後改爲int,但它仍然給出了段錯誤。
但後來我刪除了= 0
部分,它再次工作。然後我決定放回去,用gdb調試二進制文件,並且段錯誤位於strcat
。
這怎麼可能?
什麼是'currenttring'指向? – geekosaur 2012-04-13 20:12:49
目前沒有什麼,它只是一個空字符串。當我將'currenttring'指向NULL時,它會發生段錯誤。 – user1002327 2012-04-13 20:19:49
這是修辭。你是對的,它指向* nothing *。隨機存儲器。當你修改隨機存儲器時,你會怎麼想?你認爲這是什麼意思,你可以隨意寫信給它? – geekosaur 2012-04-13 20:21:38