为什么qsort中的排序方法会改变我的数组?

时间:2016-10-08 23:13:01

标签: c qsort

https://phoxis.org/2012/07/12/get-sorted-index-orderting-of-an-array/

我在

部分尝试了这个方法

在C中使用qsort

对数组进行排序并返回索引,将数组base_arr更改为double *类型。但是,当我将arr [idx [i]]打印到屏幕时,一半的值已经更改为0并且已经被排序,好像它们一直是0.可能导致这种情况发生?

#include <iostream>
#include <string>

bool CheckSubstring(std::string firstString, std::string secondString){
    if(secondString.size() > firstString.size())
        return false;

    for (int i = 0; i < firstString.size(); i++){
        int j = 0;
        // If the first characters match
        if(firstString[i] == secondString[j]){
            int k = i;
            while (firstString[i] == secondString[j] && j < secondString.size()){
                j++;
                i++;
            }
            if (j == secondString.size())
                return true;
            else // Re-initialize i to its original value
                i = k;
        }
    }
    return false;
}

int main(){
    std::string firstString, secondString;

    std::cout << "Enter first string:";
    std::getline(std::cin, firstString);

    std::cout << "Enter second string:";
    std::getline(std::cin, secondString);

    if(CheckSubstring(firstString, secondString))
        std::cout << "Second string is a substring of the frist string.\n";
    else
        std::cout << "Second string is not a substring of the first string.\n";

    return 0;
}

1 个答案:

答案 0 :(得分:2)

qsort(idx, N, sizeof(idx), idxSort);

应该是

qsort(idx, N, sizeof(*idx), idxSort);

idx是一个指针。 qsort不需要知道poiner的大小,需要知道数组元素的大小。

您的malloc来电相同。您需要在其中使用sizeof(*idx)sizeof(*ptr)。顺便说一句,不要投射malloc的结果。