首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qsort分割故障

qsort分割故障
EN

Stack Overflow用户
提问于 2012-02-11 07:35:30
回答 2查看 1.5K关注 0票数 2

因此,我正在编写一个程序,函数从stdio读取,并以n个字符块的形式继续读取字符。

到目前为止,我已经得到了它,所以所有的东西都存储在一个名为buffer的字符数组中。接下来,我需要对n个字符块进行排序。例如,如果n =5,字符串cat/n/n应该被拆分为cat/n狗/n,然后qsort()需要将它按字母顺序排列。我就是这么叫qsort()

代码语言:javascript
复制
qsort (buffer, (line-2)*n*(sizeof(char)),n,compare);

其中,(line-2)*n*sizeof(char)给出数组缓冲区中的总项数;在本例中为10项。

这是我的比较功能:

代码语言:javascript
复制
int compare (const void * a, const void * b)
{
   return (strcmp(*(char **)a, *(char **)b));
}

然而,当我运行这个程序时,我总是会在strcmp()中得到一个seg错误。知道为什么吗?

这是加载代码:

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-11 07:52:36

愚蠢的问题,但您的字符串是否为空终止?你好像最后只有一条换行符。

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

票数 1
EN

Stack Overflow用户

发布于 2012-02-11 15:15:50

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buffer[] ="333000222555111777888666999444";

int mycmp(void *l, void*r);
int main(void)
{
/* note: sizeof buffer is 31,
** but the integer division will round down
** , ignoring the extra nul-byte */
qsort(buffer, (sizeof buffer/3), 3, mycmp);
printf ("[%s]\n", buffer);

return 0;
}

int mycmp(void *l, void *r)
{
return memcmp(l,r,3);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9238630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档