一些前言:我是一名計算機工程專業的學生,在3學期的Java(高達數據結構)之後參加C的第一堂課。這個問題與家庭作業有關,但是爲了解決這個問題,我除去了一些步驟。使用stdlib的qsort()對字符串數組進行排序
我有一個輸入文件,我讀入內存,使它存儲在char [9] [500]。我讀了最多500個字符串的最大長度爲8.我試圖使用stdlib內置的qsort()函數對此數組進行排序,並且存在一些內存錯誤。的代碼
重要片段:
char data[4][500][60];
char debug[500][9];
size_t count = 0;
/* initialize file, open for reading */
FILE* pUserlog;
pUserlog = fopen("userlog","r");
while(!feof(pUserlog))
{
fscanf(pUserlog, "%9s %8s %16s",debug[count], data[1][count], data[2][count]);
fgets(data[3][count], 60, pUserlog);
count++;
}
此部分讀取數據到所述陣列。這部分感興趣的數組是「調試」。這是上面指定的數組。這裏是我的qsort比較函數:
int compare(const void* a, const void* b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
puts("I'm in compare!");
return strncmp(*ia, *ib,8);
}
這是我試圖調用快速排序:
size_t debug_len = sizeof(debug)/sizeof(char*);
printf("debug len: %d, count: %d, sizeof(char*): %d\n",debug_len,count,sizeof(char*));
qsort(debug,count, sizeof(char *), compare);
我試圖在我的電話代debug_len其中計數,但我仍然段錯誤。這裏是輸出:
$ ./test debug len: 1125, count: 453, sizeof(char*): 4 I'm in compare! Segmentation fault (core dumped)
謝謝!
while(!feof())是錯誤的。 feof將返回false,循環將進入,scanf將無法讀取數據,debug [count]將包含僞造數據,然後feof將返回true。你可以通過在循環後執行count來修復這種情況,但總的來說,你應該永遠不要這樣做(!feof()) – 2011-03-20 19:12:58
它在哪裏段錯誤?檢查覈心轉儲以確定段錯誤發生的位置是一個很好的練習,因爲它通常會告訴你問題是什麼。 – 2011-03-20 19:14:05