c - qsort段错误

标签 c strcmp qsort

所以我正在开发一个程序,其中函数从 stdio 读取,并以 n 个字符的 block 的形式读取字符。

到目前为止,我已经知道所有内容都存储在一个名为 buffer 的字符数组中。对于下一步,我需要对 n 个字符的每个 block 进行排序。例如,如果 n = 5,则字符串 cats/ndogs/n 应拆分为 cats/n dogs/n,然后 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;
}

最佳答案

愚蠢的问题,但是你的字符串是否以 null 结尾?您似乎最后只有一个换行符。

此外,您可能只需要“strcmp((char *)a, (char *)b)”,因为额外的 * 对我来说看起来是多余的。

关于c - qsort段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9238630/

相关文章:

c++ - 在非托管库方法中使用托管 C++ 中的指针

c - C中字符串的所有可能组合

read()函数会导致溢出吗?

c - 为什么 strcmp 在 c 中不起作用?

C++ - strcmp() 不能正常工作?

c - 使用 qsort() 对指向包含字符串的结构的指针进行排序

c malloc 用于二维 char 数组,通过将此数组传递给函数

c - 应为 const char * 但参数是 char 类型

c - 在指针数组的 qsort 实现中使用 FOR 循环但不使用 WHILE 时出现段错误

c - qsort结构数组删除一切