環境:Win XP VC6.0 MFC
この環境で、CObArry データをソートした後、bsearchで検索したいんですが、うまく動
きません。
コードは次の通りです。
ソートはうまく機能しています。
if(mXyList.GetSize() > 0) {
qsort((void**)mXyList.GetData(),
(size_t)mXyList.GetSize(), sizeof(char*), xycomp);
}
strcpy(key, (char*)mXyList.GetAt(mXyList.GetSize()-1));
result = *(char**)bsearch((const void*)&key, (const void**)
mXyList.GetData(), (size_t)mXyList.GetSize(), sizeof(char*), xycomp);
中途半端な質問で誤って送ってしまったので改めて教えていただきたいことを書きま
す。
コード的には次のような書き方をしていますが、うまく機能しません。
void a() {
CObArray mXyList;
char key[128];
result = *(char**)bsearch((const void*)&key, (const void**)mXyList.GetData(),
(size_t)mXyList.GetSize(), sizeof(char*), xycomp);
}
int xycomp(const void* str1, const void* str2) {
return strncmp(*(char**)str1, *(char**)str2, 16);
}
mXyListは前段でソート済みです。
ソートについては前回教えていただいたqsortでうまく機能できました。
宜しくお願いします。
うまく機能しないとは具体的にどうなるのでしょうか?
コンパイルエラーでしょうか? それとも 検索が結果が間違っているのでしょうか??
また、本題とは外れますが、配列の要素はchar*なのでしょうか?
もしそうであれば、CObArrayではなく
CPtrArray 又は CTypedPtrArray<CPtrArray, char *> を使うことをお勧めします。
CObArrayはCObject *を扱う時に使用するものです。
試してみました。
原因はkeyはポインタでは無いので、そのアドレスを取ることが出来ないことにあります。
下記の様に変更してみてください。
char key[128];
char *pkey=key;
result = *(char**)bsearch((const void*)&pkey, (const void**)mXyList.GetData(),
(size_t)mXyList.GetSize(), sizeof(char*), xycomp);