空指针发出奇数点问题

scl*_*ee1 0 c bsearch

我正在使用C语言进行代码练习.

如下代码,

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define _CRT_SECURE_NO_WARNINGS

int ACDSort(const void *p1, const void *p2);
int Compare(const void *pKey, const void *pValue);
int main(void)
{
    char * strAry[4] = {"Hardware","Cookie","Boy","Power"};
    char * destStr = "Cookie";

    //qsort((void*)strAry, sizeof(strAry) / sizeof(char*), sizeof(char*), ACDSort);

    char **ptrAdr = (char**)bsearch((void*)destStr, strAry, sizeof(strAry) / sizeof(char*), sizeof(char*), Compare);

    printf("%s\n", *ptrAdr);
}

int Compare(const void *pKey, const void *pValue) {
    char *key = ((char*)pKey);
    char *value = *((char**)pValue);
    return strcmp(key, value);
}

int ACDSort(const void *p1, const void *p2) {

    char * n1 = *((char**)p1);
    char * n2 = *((char**)p2);
    int ret;

    if (strlen(n1) > strlen(n2))
        ret = 1;
    else if (strlen(n1) < strlen(n2))
        ret = -1;
    else
        ret = 0;
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

我打电话bsearch找到了一串cookie.问题是当我擦除时发生错误//,以便根据字符串长度对数组进行排序.我不知道为什么错误被执行,因为我认为这qsort不能对我的代码产生重大影响.

你能告诉我在擦除时错误发生的原因是返回空指针//吗?

PS.我使用qsortbsearch熟悉指针变量.

Lun*_*din 5

bsearch使用二进制搜索,这就是原因.二进制搜索需要对数据进行排序.按字母顺序对字符串数组进行排序,它将起作用.

作为旁注,你需要摆脱所有那些多余的演员阵容,他们所做的只是隐藏潜在的错误.

修复和清理后的工作程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare (const void* p1, const void* p2);

int main (void)
{
    const char* strAry[4] = {"Boy", "Cookie", "Hardware", "Power"};
    const char* key = "Cookie";

    char** ptrAdr = bsearch(key, 
                            strAry, 
                            sizeof(strAry)/sizeof(*strAry), 
                            sizeof(*strAry), 
                            compare);

    printf("%s\n", *ptrAdr);
}

int compare (const void* p1, const void* p2) 
{
  const char* s1 = p1;
  const char* s2 = *(const char* const*)p2;

  return strcmp(s1, s2);
}
Run Code Online (Sandbox Code Playgroud)

p2将结束一个const指向a的void指针const char*,这就是为什么我们在争取const-correctness时得到那种奇怪的演员.