私はC言語を使ってコード練習をしています。nullポインタによる奇妙な点の問題
はコード、
#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;
}
以下のとおり私はcookie
の文字列を検索するbsearch
と呼ばれます。 問題は、文字列の長さに基づいて配列をソートするために//
を消去したときにエラーが発生したことです。 qsort
が私のコードに重大な影響を与えることができないと思って、なぜエラーが実行されたのか分かりません。
//
の消去時にエラーが発生した理由を教えてください。
ps。私はqsort
とbsearch
を使ってポインタ変数に慣れる。
'bsearch'は、配列がすでにソートされている場合にのみ機能します –
通常、' qsort() 'と' bsearch() 'の両方に同じ比較関数を使うべきです。異なる機能を使用する必要がある場合は、何か問題があります。 –
なぜ 'qsort()'と 'bsearch()'の両方に異なる関数を使うのですか? – sclee1