使用qsort排序字符串

时间:2016-08-01 01:50:37

标签: c data-structures

我正在尝试使用stdlib qsort对字符串数组进行排序。任何人都可以向我指出我失踪的一步。

int compare(const void* a, const void* b)
{
    const char *ia = (const char *)a;
    const char *ib = (const char *)b;
    return strcmp(ia, ib);
}

//utility to print strings
void print_strs(char name[][10],int len){

    int i=0;
    len = 5;
    for(i=0;i<len;i++){
        printf("%s \n",name[i]);
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    char names[5][10] = {"norma","daniel","carla","bob","adelle"};
    int size1 = sizeof(names[0]);
    int s2 = sizeof(names)/size1;
    print_strs(names,5);
    qsort(names,s2,sizeof(char),compare);
    printf("\n==================\n");
    print_strs(names,5);
    return 0;
}

以下是输出中的问题:

1.snsorted字符串  2.数组的第一个字符串不正确(Norma打印为amnor)。

norma
daniel
carla
bob
adelle
==================
amnor
daniel
carla
bob
adelle

1 个答案:

答案 0 :(得分:1)

您在致电size时传递了错误qsort。您将sizeof(char)作为单个元素的大小传递,这是错误的。在您的情况下,每个单独的元素都是一个包含十个字符的字符串。

因此,您可以通过将qsort称为:

来更正此问题
qsort(names,s2,sizeof(char) * 10,compare); 

或者,正如您已在size1中捕获此值,您可以使用它,如:

qsort(names,s2,size1,compare);