繁体   English   中英

memcmp对于相同(零值)位字段结构返回非零

[英]memcmp returning non zero for same (zero value) bit field structs

比较两个都包含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)设置结构实例,在这种情况下将产生正确的结果。

在这种情况下,您可以完美地做的只是比较该位域而不是整个结构实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM