qsort()函数在c中没有按预期工作

时间:2015-06-10 09:27:08

标签: c qsort

我正在尝试使用qsort()编写一个简单的字符串排序程序。(灵感来自Linux中qsort手册中的程序)

这是我的代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void disparray(int i,char words[10][20]);
int compare_strings(const void *a,const void *b);

int main()
{
    int index=0;
    char words[10][20];
    while(fgets(words[index],20,stdin)) //take array of strings as input from stdin
    {
        if (words[index][0]=='\n') break;
        words[index][ strlen(words[index]) - 1 ] = '\0'; //to remove trailing newline
        index++;
        if (index==10)break;
    }
    disparray(index,words);
    qsort(words,index,sizeof(char*),compare_strings);
    disparray(index,words);
    return 0;
}

int compare_strings(const void *a,const void *b)
{
    //return strcmp(*(char **)a, *(char**)b); // this is what I think is correct command, but it causes segfault.
    return strcmp(a,b);                         // This gives wrong result.
}

void disparray(int index,char words[10][20])
{
    int f=0;
    while(f<index)
        {
            printf("%s\n",words[f]);
            f++;
        }
}

但我遇到qsort函数和比较函数的问题。 我得到的输出没有在我的程序的当前版本中排序。这就是我得到的

./trial <words
one
two
three
four
five
six
seven
eight
nine
ten

0�one
three
four
five
six
seven
eight
nine
ten

我该如何解决?

0 个答案:

没有答案