【发布时间】:2017-02-07 07:37:46
【问题描述】:
我正在使用 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;
}
我打电话给bsearch 来查找cookie 的字符串。
问题是当我删除 // 以便根据字符串长度对数组进行排序时发生错误。
我不知道为什么会执行错误,因为我认为 qsort 无法对我的代码产生重大影响。
你能告诉我擦除//时返回空指针错误的原因吗?
附言。我用qsort和bsearch来熟悉指针变量。
【问题讨论】:
-
bsearch仅在数组已排序时有效 -
请注意,您通常应该对
qsort()和bsearch()使用相同的比较函数。如果你必须使用不同的功能,那你就做错了。 -
为什么
qsort()和bsearch()使用不同的函数? -
@JonathanLeffler 在这种情况下不是。查看答案。