在比较值中均包含0的两个位字段结构时,我看到了memcmp的意外输出。memcmp在输出中返回非零结果。
这是否意味着位字段不引用可以保留任何内容?如果是这样(导致memcmp不可靠),那么比较任何包含位字段的内容的最佳方法是什么?我可以有自己的类或类型与位字段结构。

struct bitStruct{
    int b:4;
};
int test()
{
    bitStruct s = {0};
    bitStruct zero = {0};
    cout << memcmp(&s, &zero, sizeof(s)); // this memcmp returns non-zero.
    return 0;
}

最佳答案

可能涉及填充。memcmp只会比较sizeof(s)字节,就这样。如果涉及填充,结果将不会如您所期望的那样,因为结构的未命名成员将处于不确定阶段。比较不会得出相同的结果。您可以使用sizeof(structure type)对结构实例进行memset,这将在本场景中产生正确的结果。
在这种情况下,您可以完美地做的事情是只比较该位字段,而不是比较整个结构实例。

关于c++ - memcmp对于相同(零值)位字段结构返回非零,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48655075/

10-11 21:06