Немного предисловия: я учусь на инженера-компьютерщика, беру первого класса по Си после 3 семестров Java (вплоть до структур данных) Этот вопрос относится к домашнему заданию, но несколько шагов от его решения для меня исключены.
У меня есть входной файл, который я читаю в память, так что он сохраняется в 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);
}
Это моя попытка вызвать qsort:
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 в моем вызове, где count, но я все еще segfaulting. Вот вывод:
$ ./test
debug len: 1125, count: 453, sizeof(char*): 4
I'm in compare!
Segmentation fault (core dumped)
Спасибо!