Программа, над которой я работаю, берет файл и анализирует его построчно, затем изменяет каждую строку на uint32_t и добавляет ее в массив. Оттуда я должен отсортировать массив с помощью qsort(). Я написал свою программу так, как я думал, но когда я тестирую код, он говорит, что все новые uint32_ts имеют одно и то же значение. Это из-за ошибки, когда я меняю строку на uint32_t? Было бы лучше использовать strtoul? Последний вопрос: правильно ли реализован мой qsort? (он компилируется и говорит, что отсортировал вещи, но я не уверен, так как мое преобразование в uint_32 явно неверно. В любом случае, вот код:
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;
}
compar
внутриmain
) является расширением gcc. Если вы хотите, чтобы ваш код был переносимым, вам не следует использовать это. Просто переместите свое определениеcompar
передmain
. - person Jens Gustedt   schedule 10.02.2012