読書中:カウンターを使用せずに、配列の要素がすべて同じであることを確認するにはどうすればよいですか? 、@Skizz は気の利いたソリューションを使用します。
memcmp (&string [0], &string [1], sizeof string [0] * (N - 1))
したがって、N がたまたま 1 の場合、次のようになります。
memcmp (&string [0], &string [1], 0)
コンペア長が0のとき戻り値は必ず0ですか?
テスト ケース (Cygwin gcc バージョン 4.8.1 Windows 64 ビット) が返されます0
。だから私はこれと他のいくつかのコンパイラ/プラットフォームでそれが0であることを知っています.
printf("%d\n", memcmp("foo", "bar", 0));
C11 ドラフト仕様が続きますが、この問題については静かに見えます。たぶん、仕様の別の部分か何かが何かを言っているのでしょうか?
7.24.4.1 memcmp
関数
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
説明
memcmp 関数は、s1 が指すオブジェクトの最初の n 文字と、s2 が指すオブジェクトの最初の n 文字を比較します。
戻り値
memcmp 関数は、s1 が指すオブジェクトが s2 が指すオブジェクトより大きい、等しい、または小さいため、ゼロより大きい、等しい、または小さい整数を返します。
(&string [1] が不正なメモリを参照していないと仮定します)