Программа, над которой я работаю, берет файл и анализирует его по строкам, а затем изменяет каждую строку на 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;
}
Определение функции внутри другой функции (здесь 'compare' внутри' main') является расширением gcc. Если вы хотите, чтобы ваш код был портативным, вы не должны его использовать. Просто переместите определение 'compare' перед' main'. –