我正在做一个使用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
无法对我的代码产生重大影响。
你能告诉我为什么错误发生时返回空指针擦除//
的原因?
Ps。我使用qsort
和bsearch
来熟悉指针变量。
'bsearch'仅在数组已被排序时才有效 –
请注意,对于'qsort()'和'bsearch()',您通常应该使用相同的比较函数。如果你必须使用不同的功能,你做错了什么。 –
为什么对'qsort()'和'bsearch()'使用不同的函数? – sclee1