Итак, я работаю над программой, в которой функция читает из stdio и продолжает читать в символах кусками n символов.
До сих пор я понял, что все хранится в массиве символов, называемом буфером. Для следующего шага мне нужно отсортировать каждый кусок из n символов. Например, строка cats / ndogs / n должна быть разделена на кошки / n собак / n, если n = 5, а затем qsort()
необходимо алфавитировать ее. Вот как я звоню qsort()
:
qsort (buffer, (line-2)*n*(sizeof(char)),n,compare);
Где (line-2)*n*sizeof(char)
- общее количество элементов в буфере массива; 10 в этом случае.
Это моя функция сравнения:
int compare (const void * a, const void * b)
{
return (strcmp(*(char **)a, *(char **)b));
}
Однако, когда я запускаю это, я всегда получаю ошибку сегмента в strcmp()
. Есть идеи почему?
Это код загрузки:
while (!feof(stdin))
{
for (i = 0; i < n; i++)
{
char l = getchar();
if (l != EOF)
{
if ((i == 0) && (line != 1))
{
success = (int *)realloc(buffer, line*n*(sizeof(char)));
}
buffer[(n*(line-1))+i] = l;
}
}
line = line + 1;
}