問題タブ [memcmp]
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.
android - unsigned char は memcmp のような正しい値を出力します
私はこの変数を持っています、
この識別子を使用するときは、にキャストします
お気に入り
そして私は関数で受け取ります:
両方を比較したいので、これを使用しますmemcmp(identifier1, zid, 12);
答えは 0 なので、どちらも等しい...
しかし、値を出力すると:
両方で異なる値を取得します...のよう1711428512 1652772888
に、書き込みの答えがmemcmp
得られます...値を出力して両方の正しい値を取得するにはどうすればよいですか?
c - c NULL (文字 0) を扱える strncasecmp
文字 0 を含む可能性のある文字列があります。これらは次のような構造に格納されます。
これらのうちの 2 つを一緒に比較したい場合は、memcmp をそのまま使用できます。
しかし、大文字と小文字を区別せずにこれらの 2 つを比較したい場合、私の最初の本能は strncasecmp/_strnicmp を使用することですが、その関数は null 文字で停止します。
これを行うことができる一般的なC関数はすでにありますか?自分で書いてもかまいませんが、その前に、知らない標準関数がないことを確認したいと思います。
c - 最初の配列要素のアドレスが等しいのはなぜですか?
私はプロジェクトに取り組んでおり、コード内のバグを見つけるために最後の 1 時間を費やしました。よく調べてみると、ずっと問題だった奇妙なことに気づきました。
私の配列の最初の要素のアドレスは奇妙に と等しいmemcmp()
です。コードを分離してテスト コードを試したところ、同様の結果が得られました。誰かがこの奇妙な振る舞いを説明できますか?
memcmp - strncmp と memcmp の使用
する
と同じことをする
buf
およびbuf2
char* 配列または類似のものです。
これを別の質問に追加するつもりでしたが、おそらく別々に投稿する方がよいと判断しました. おそらく、答えは些細な「はい」であるか、そうでない場合、違いは何ですか?
(これらの関数はオンライン ドキュメントから見つけましたがstrncmp
、ドキュメントが少し不明瞭だったのでわかりませんでした。)
c - 異なるデータを持つ 2 つのポインターの Memcmp
コード スニペットはより大きなプロジェクトの一部であるため、この質問を説明するのは少し難しいです。私はできる限り問題を説明しようとします。
私は2つのファイルを持っています
関数では、次のコードを実行します。
offset.txt に出力される値は次のとおりです。
client_random と ssl の定義は次のとおりです -
memcmp の値がゼロでない理由がわかりません。ポインターに格納されているデータのエンコードが異なっているのではないかと思いますが、その場合はどうすれば値を比較できますか。いずれかのポインターで、データが 16 進タイプなのか生/ASCII データなのかわかりません。
c++ - 符号なし数値の高速比較配列
次のコードを検討してください。
CmpHashArray には未定義の動作がありますか? -O2 を使用すると、memcmp の代わりに 2 つの asm 命令が必要になるためです。
UPD:
ご回答ありがとうございます。私が今見ているように、CmpHashArray は 1 に要約できます。sizeof(array) <= 64bit
このコードで memcmp をより高速に実行できるか? (64 および 32 ビット システム、クロスプラットフォーム)
c++ - C++:演算子の呼び出しとその実装の呼び出しに違いはありますか
特定のメンバーで==
演算子をオーバーロードしたクラスがあります。memcmp()
コードで行われた不適切なコピー (memcpy
本来よりも大きなサイズで呼び出された) が原因で、オペレーターを呼び出すときにセグメンテーション違反が発生しました==
。
UB が神秘的で明らかに定義されていないことは理解していますが、それでも気になる点があります。
デバッグ中に、==
呼び出しをその実装と交換しました (つまり、a==b
と交換しましたmemcmp(a.member_x, b.member_x, SIZE)
)。セグメンテーション違反はありません!
では、オペレーター自体を使用することと、それを実装に置き換えることの間に違いはありますか、それともこれは単に UB ですか?
明確にするために: はい、このコードには UB が含まれています。それは悪いことであり、その結果は未定義です。私が知りたいのは、オペレーターを呼び出したり、本体を呼び出したりすると、何か違うことが起こりますか? UBは、違いが存在する可能性があると私に思わせました(そして明らかに修正されました)
c - 正確には、memcmp は何を返すことになっているのでしょうか?
memcmp
関数が何を返さなければならないか知りたいです。
私はインターネットで検索してきましたが、通常、memcmp
定義には次のようなものが記載されています。
memcmp() 関数は、s1 が指すオブジェクトが s2 が指すオブジェクトより大きい、等しい、または小さいため、ゼロより大きい、等しい、または小さい整数を返します。
正確に何が返されるかは明示的に述べられることはありません。それは2 つのバイト値の差ですか、それとも -1、0、または 1 ですか? 私は混乱しています:
- 小さなプログラムで関数をテストする
memcmp
と、評価された 2 バイトの差が 1 より大きいか -1 より小さい場合でも、-1、0、または 1 が返されます。 - インターネットで名前が付けられた関数を見ると
memcmp
、ほとんどすべての関数が、-1、0、または 1 を返す代わりに、2 バイトの差を int として返します。
関数 の十分に正確な定義を得ることができないので、memcmp
ここでこの質問をします。正確には、関数は何memcmp
を返すことになっていますか? どこかに「公式」ソースコードはありますか? (私は多くのソースコードを見てきましmemcmp
たが、誰も答えをくれませんでした:少なくとも私のコンピュータではライブラリstring.hに書かれている関数ではないと思います...)
alignment - glibc ソース コード プロジェクトの memcmp.c で発生するマクロ __insn_dword_align の定義はどこにありますか?
関数 memcmp の glibc での実装では、マクロ DBLALIGN(たとえば、DBLALIG(a3, a0, srcli)) を使用して、2 つの符号なし int 整数を比較します。DBLALIGN は次のように宣言されます。ただし、__insn_dword_align の定義は、glibc のソース コードにはありません。どこで見つけることができますか。ありがとうございました!