問題タブ [bsearch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 比較関数の Bsearch とジャンク値
次のプログラムがあります。
「比較」機能では、「c1」変数 (検索対象のキー) は正しく表示されますが、v2 変数にはジャンク出力があります。
出力例を次に示します。
この振る舞いが理解できません。
c++ - std::bsearch でメンバー関数を使用する方法
私は C++ クラスを持っていますが、低レベルの C も使用しており、bsearch関数を使用する必要があります。の最後の引数bsearchは比較関数であり、クラスの const プライベート変数にアクセスできるようにこの関数を実装したいと考えています。
問題は、比較関数をメンバー関数にすると、通常の関数ポインターに変換できないため、機能しないことです。非メンバー関数を作成するとbsearch、それを に渡すことができますが、クラスのプライベート変数にはアクセスできません。
何をすべきか?
3 は 3 つの要素があることを意味します。16、32、56 はオフセット バイトです。アクターを検索するには bsearch が必要です。オフセット配列で検索しています。比較関数内の位置を計算するためのポインター。actorFIle はクラスのプライベート変数です。
c - C の文字列を使用した Bsearch
そのため、C で bsearch 関数を使用して、文字列の配列でバイナリ検索を実行しようとしています。何らかの理由で、常に NULL を返します。bsearch の比較機能については、strcmp を使用しませんでしたが、驚くべきことに、バイナリ検索機能の手動実装で機能する独自のものを作成しました。とにかく、少し説明しますが、ここに私のメインコードがあります:
このコードの最初の部分は、長さ MAX の N 個の文字列 (最初に定義されたマクロ) を含む文字列 (名前付きの単語) の配列を作成するだけです。私はこの部分をテストしましたが、動作するので問題ありません。
その後、seek_word が入力されます。これは、'words' で見つけようとしている単語です。bsearch を呼び出し、比較関数として自分で作成した関数を使用しました。外観は次のとおりです。
実際の比較作業は、void ポインターを char ポインターにキャストした b_compare_words 関数から呼び出した compare_words 関数で行われます。これをテストすると、-1 が返されます (bsearch によって返されるポインターが NULL であることを意味します)。ここが興味深い部分です。これとは別に、同じことを行う独自のバイナリ検索関数を作成しましたが、機能します (以下でコメントアウトした部分を確認できます)。この関数は bin_search_string と呼ばれ、次のようになります。
ご覧のとおり、この関数は、bsearch にも渡したのと同じ compare_words 関数を使用しています。しかし、独自の関数を使用してプログラムをテストすると、実際に機能します (文字列が見つかったインデックスを返します)。では、bsearch が機能しない理由はありますか? 前もって感謝します。
