特に、以下は明確に定義されているか、または未定義の動作を示していますか?memcmpにヌルポインタを渡すことはできますか?
memcmp(0, 0, 0);
CとC++の違いはありますか?理想的には、標準から引用符を入力してください。
特に、以下は明確に定義されているか、または未定義の動作を示していますか?memcmpにヌルポインタを渡すことはできますか?
memcmp(0, 0, 0);
CとC++の違いはありますか?理想的には、標準から引用符を入力してください。
具体的には、次のように明確に定義されているか、または未定義の動作を示していますか?
未定義です。 C99 7.21.1/2は、すべての文字列関数について述べている:
を持たなければなりません明示的にこの節で特定の機能の説明で特に を明記しない限り、ポインタ引数は、コールの がまだ有効な値
と、7.21.4.1のmemcmp
の説明には、特に明記されていません。
CとC++の違いはありますか?
いいえ、C++はCライブラリ関数の定義のためにCに委ねられていますが、特別なことについてはmemcmp
については言及していません。
2番目の引用符の関連性は、先頭のコンテキストによって明確になります。 'size_t nで宣言された引数が関数の配列の長さを指定する場合、nはその関数の呼び出しで値0を持つことができます。他に明記されていない限り... – user295691
受け入れていただきありがとうございます。しかしもう1つの質問:ポインタの "有効な値"は本当に "非null"を意味しますか?その旨の引用がありますか? – avakar
@avakar:もしあなたが本当に苦い終わりまで標準を守りたいのであれば、引用符は "有効"の定義のために7.1.4を参照していて、特に "nullポインタ"を含むライブラリ関数の "無効な"値の例 –
これは実行されますか?あなたはNULLからメモリを読み込みますが、私はそれがうまくいくかどうかわかりません。 – Eric
閉じるボタンを押すのが早すぎます。これは 'memcpy'ではなく、' memcmp'に関するものです。再投票する投票。 –
@Eric 'count'パラメータが' 0'の場合、ポインタは逆参照されるべきではありません。しかし、言われていることは、標準がこの行動を保証しているかどうかを質問します。私はその答えを知らないのです。 – Praetorian