C++ 使用q排序的分割错误?

C++ 使用q排序的分割错误?,c++,qsort,C++,Qsort,我试图使用qsort对字符的指针数组进行排序,并在编译时不断出现分段错误。我将发布我的qsort调用和比较函数的代码,任何帮助都将不胜感激 //count declaration size_t count = (sizeof (strPtrsQsort)/sizeof (*strPtrsQsort)); //function call qsort ((char *)ptr, size, sizeof(char), compare); //compare function int compare

我试图使用qsort对字符的指针数组进行排序,并在编译时不断出现分段错误。我将发布我的qsort调用和比较函数的代码,任何帮助都将不胜感激

//count declaration
size_t count = (sizeof (strPtrsQsort)/sizeof (*strPtrsQsort));
//function call
qsort ((char *)ptr, size, sizeof(char), compare);

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

根据
qsort
调用判断,您正在对
char
元素数组进行排序:基本指针类型作为
char*
值传递给
qsort
,元素大小为
sizeof(char)
。但是,您的比较函数是为指向
char
的指针数组编写的。这是完全不正确和不一致的。这就是造成这次事故的原因


在随附的文本中,您声明您正在“尝试对字符的指针数组进行排序”。为什么在这种情况下,您指定元素大小为<代码> siZeOf(char)< /C> >而不是,例如,<>代码> siZoof(char)

请注意,即使当您需要使用C样式原始数组时,仍然可以使用C++ STL算法,因为指针实际上是随机访问迭代器。例如,这项工作:

#include <algorithm>
#include <iostream>
#include <cstring>

static
bool compare(const char *a, const char *b)
{
    return std::strcmp(a, b) < 0;
}

int main()
{
    const char *stringarray[] = {
        "zyxulsusd",
        "abcdef",
        "asdf"
    };

    std::sort(stringarray, stringarray + 3, compare);
    //                      -----------^
    // Just like a normal iterator the end iterator points
    // to an imaginary element behind the data.

    for(int i = 0; i < 3; i++) {
        std::cout << stringarray[i] << std::endl;
    }

    return 0;
}
#包括
#包括
#包括
静止的
布尔比较(常量字符*a,常量字符*b)
{
返回std::strcmp(a,b)<0;
}
int main()
{
常量字符*字符串数组[]={
“Zyxulsud”,
“abcdef”,
“asdf”
};
排序(stringarray,stringarray+3,比较);
//                      -----------^
//就像普通迭代器一样,结束迭代器指向
//到数据后面的一个虚拟元素。
对于(int i=0;i<3;i++){

STD:什么是代码>计数>代码>什么是代码> StrutRQueStase<代码>它们存在于代码中的任何代码段中?它们在代码> qSque<代码>中没有使用。为什么在C++中使用C字符串、原始数组和C的<代码> QStase<代码> >使用<代码>:STD::向量< /代码>和<代码> STD::排序< /代码>。如果你试图对点数组排序呃,为什么数组元素大小作为
sizeof(char)传递给
qsort
???
ptr
是如何声明的?为什么在传递到
qsort
之前要将其转换为
char*
?感谢您的帮助。我对指针非常陌生,我刚刚开始解引用。这帮了大忙。我不确定
stringarray[3]
是有效的,即使您只需要它的地址。已更改为其他语法