gpt4 book ai didi

c - 在 C 中使用 pragma pack 的结构相等性

转载 作者:太空宇宙 更新时间:2023-11-04 01:57:27 24 4
gpt4 key购买 nike

在 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;
}

最佳答案

您的代码无法编译,因为您无法直接比较两个 struct

你应该使用类似memcmp的东西:

memcmp(&var, &varDupe, sizeof(var));

这并没有解决填充问题,这可以通过确保结构被正确初始化为已知值来解决,即使是在填充字节上(可以在初始化之前通过 memset 获得)字段)。

但是打包 struct 以删除填充只是为了检查它们是否相等的方法似乎是一个脆弱的解决方案。如果编译器需要填充,那么它有充分的理由,可能与性能有关。

关于c - 在 C 中使用 pragma pack 的结构相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com