C qsort()-对字符串数组进行排序
这里似乎找不到任何问题的答案。 基本上我有这样一行代码:C qsort()-对字符串数组进行排序,c,sorting,qsort,C,Sorting,Qsort,这里似乎找不到任何问题的答案。 基本上我有这样一行代码: qsort(Code_Lines, number_of_lines, sizeof(char*), myCmp); 当code\u行是一个char**-当每一行都包含一个字符串或指向NULL时,指向一个char*数组。我要做的是,当包含NULL的字符串位于数组末尾时,按字母顺序对所有字符串进行排序。 code\u行中的每个字符串将按其前4个字符进行排序(每个字符串的长度不相等-前四个字符总是不同-提及从0001到9999)的数字),如果
qsort(Code_Lines, number_of_lines, sizeof(char*), myCmp);
当code\u行
是一个char**
-当每一行都包含一个字符串或指向NULL时,指向一个char*
数组。我要做的是,当包含NULL的字符串位于数组末尾时,按字母顺序对所有字符串进行排序。
code\u行
中的每个字符串将按其前4个字符进行排序(每个字符串的长度不相等-前四个字符总是不同-提及从0001
到9999
)的数字),如果为空,则只将其放在数组的末尾。
变量number\u of_line
包含数组中的行数(代码行),也称为数组中的元素数(在本例中为字符串)。
myCmp是我的比较函数,我是这样编写的:
int myCmp(const void* element1, const void* element2)
{
int return_value;
if(!element1) //element1 of them is NULL
{
return_value = 1;
}
else if(!element2) //element 2 is NULL
{
return_value = -1;
}
else
{
return_value = strncmp(*((char**)element1), *((char**)element2), 4);
}
return return_value;
}
知道问题出在哪里吗?程序就在那里崩溃了。
该函数在数组不包含NULL时工作,但在数组包含NULL时失败…在
qsort
比较函数中,参数是指向您提供的数组元素的指针,而不是元素本身。被比较的元素显然是存在的,因此根据定义,这些指针永远不能为NULL。您要检查的是特定元素是否为NULL
,而不是指向元素的指针:
int myCmp(const void* element1, const void* element2)
{
int return_value;
char * e1 = *(char **) element1;
char * e2 = *(char **) element2;
if(!e1) //element1 of them is NULL
{
return_value = 1;
}
else if(!e2) //element 2 is NULL
{
return_value = -1;
}
else
{
return_value = strncmp(e1, e2, 4);
}
return return_value;
}
如果你想把
NULL
放在末尾,为什么说第一个在NULL
时更小,第二个在NULL
时第一个更大?element1
和element2
都是数组中元素的指针,永远不能NULL
@chris My bad确实如此,代码不起作用-当存在NULL时,代码就不起作用。知道为什么会这样吗?当然,我可以创建自己的排序函数,但它没有“qsort()”那么有效,我对崩溃原因很感兴趣:P@T.C.为什么不呢?数组包含指针,指针不能指向NULL?:P@user3745476,qsort
提供指向所比较元素的指针。由于要比较的元素始终存在,因此这些指针不能为null。它们指向的不是空指针就是字符串。@user3745476代码行不多。事实上,请阅读。哦,我只是没有理解IF声明中的区别,非常感谢,它现在起作用了,我明白了:)