0

unsigned chars と bitfields を含む構造体があります。

struct {
unsigned char byt1    ;
unsigned char var1  :1;
unsigned char byt2    ;
unsigned char var2  :1;
unsigned char var3  :1;
unsigned char var4  :1:

} struct1;

この構造体をそれ自体と比較したい。この構造体のコピーを 2 つ保持しており、最初のコピーと比較して何かが変更されたかどうかを確認したいだけです。

ここで memcmp() を使用しても安全ですか? 実際の構造体には 50 以上のメンバーがあり、それらはすべて符号なしの文字またはビットです。

4

1 に答える 1

1

構造には多くのパディングが含まれている可能性があり、そのメモリの内容は指定されていないように見えます (たとえば、この古い SO の回答このmemcmp参照も参照してください)。実際には使用できませんmemcmp

ただし、構造体を eg で初期化すると、機能memsetするはずです。技術的には指定されていませんが、実際にmemsetはパディングも設定する必要があります。

したがって、あなたの質問に答えるには: を使用して常に構造をクリアするmemset場合は、実際には を使用しても問題ありませんmemcmpが、理論的には未定義の動作です。

于 2015-06-22T15:09:23.350 に答える