我正在處理的程序需要一個文件並逐行解析,然後將每行更改爲一個uint32_t並將其添加到數組中。從那裏我應該用qsort()對數組排序。 我寫了我的程序,我認爲它應該是什麼樣的,但是當我測試代碼時,它說所有新的uint32_ts都是相同的值。這是因爲當我將字符串更改爲uint32_t時出現錯誤?使用strtoul會更好嗎? 最後一個問題,我的qsort的實現是否正確? (它編譯,並表示,該公司已經整理東西,但我不知道,因爲我轉換到uint_32顯然是不正確的 反正這裏是代碼:使用qsort對無符號整數進行排序
int main(int argc, char* argv[]){
char const* const fileName = argv[1];
FILE* file = fopen(fileName, "r"); // should check the result
char line[256];
uint32_t parArray[256];
int compar(const void *a, const void *b){
const unsigned long long *x = a, *y = b;
if(*x > *y)
return 1;
else
return(*x < *y) ? -1: 0;
}
int lineCounter = 0; // starts at 0 for the array
while(fgets(line, sizeof(line), file)){
// parse all info here
uint32_t t = (uint32_t) line;
// build the array
parArray[lineCounter]=t;
lineCounter++;
printf("Original: %s, Unsigned Int: %u\n", line,t);
}
qsort(&parArray[0],lineCounter+1,sizeof(uint32_t*),compar);
int i;
for(i=0;i<lineCounter;i++){
printf("%u\n",parArray[i]);
}
return 0;
}
在另一個函數內部定義一個函數(這裏''main'內的'compar')是一個gcc擴展。如果你希望你的代碼是可移植的,你不應該使用它。只要將'compar'的定義移到'main'前即可。 – 2012-02-09 20:03:23