似乎无法在这里找到任何问题的答案。 基本上我有这行代码:
qsort(Code_Lines, number_of_lines, sizeof(char*), myCmp);
当Code_Lines
是char**
时 - 指向char*
个数组,每个数组包含一个字符串或指向NULL。我想要做的是当包含NULL的字符串位于数组的END时按字母顺序对所有字符串进行排序。
Code_Lines
中的每个字符串将按其4个第一个字符排序(每个字符串的长度不相等 - 前四个字符总是不同的 - 提及0001
到9999
的数字),如果它为NULL,它将把它放在数组的末尾。
变量number_of_lines
包含数组中的行数(代码行),AKA - 数组中的元素数(在本例中为字符串)。
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时有效,但在执行时失败...
答案 0 :(得分:2)
在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;
}