CObArry クラスと bsearch の関係 – プログラミング – Home

通知
すべてクリア

CObArry クラスと bsearch の関係


ひろし
 ひろし
(@ひろし)
ゲスト
結合: 23年前
投稿: 24
Topic starter  

環境: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);


引用解決済
トピックタグ
ひろし
 ひろし
(@ひろし)
ゲスト
結合: 23年前
投稿: 24
Topic starter  

中途半端な質問で誤って送ってしまったので改めて教えていただきたいことを書きま
す。

コード的には次のような書き方をしていますが、うまく機能しません。
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でうまく機能できました。
宜しくお願いします。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 24年前
投稿: 240
 

うまく機能しないとは具体的にどうなるのでしょうか?
 コンパイルエラーでしょうか? それとも 検索が結果が間違っているのでしょうか??

また、本題とは外れますが、配列の要素はchar*なのでしょうか?
もしそうであれば、CObArrayではなく
CPtrArray 又は CTypedPtrArray<CPtrArray, char *> を使うことをお勧めします。
CObArrayはCObject *を扱う時に使用するものです。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 24年前
投稿: 240
 

試してみました。
原因はkeyはポインタでは無いので、そのアドレスを取ることが出来ないことにあります。
下記の様に変更してみてください。

char key[128];
char *pkey=key;

result = *(char**)bsearch((const void*)&pkey, (const void**)mXyList.GetData(),
(size_t)mXyList.GetSize(), sizeof(char*), xycomp);


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました