【发布时间】:2015-08-27 19:26:46
【问题描述】:
在 C 中无法检查结构是否相等的原因是存在松弛字节,这使得比较不可能。
但是如果我使用#pragma pack(1) 来删除松弛字节,那么比较应该可以顺利进行,但在比较时仍然会出错。
示例代码
#include<stdio.h>
#pragma pack(1)
struct person
{
int uid;
char nameStart;
};
struct personDupe
{
int uid;
char nameStart;
};
int main()
{
struct person var;
struct personDupe varDupe;
printf("\nSize of person : %3d\n",sizeof(var));
printf("\nSize of personDupe : %3d\n",sizeof(varDupe));
var.uid = 12;
var.nameStart = 'a';
varDupe.uid = 12;
varDupe.nameStart = 'a';
if(var == varDupe) //Error is introduced
printf("\nStructures are equal\n");
return 0;
}
【问题讨论】:
-
你遇到了什么错误?
-
第二个问题:如果你认为它们是平等的,为什么会有两种不同的类型?
-
@Bo Persson 第二种类型只是用于检查我脑海中关于 pragma pack 的逻辑,否则对于检查相等性 memcmp 很有帮助,正如 Jack 所建议的那样
-
@Bob Jarvis 错误:D:\Code\structEquality.c|26|错误:二进制 == 的操作数无效(有 'struct person' 和 'struct personDupe')|
-
什么是“松弛字节”?