我正在尝试使用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
我该如何解决?