gpt4 book ai didi

c++ - 打包结构成员的传递地址

转载 作者:行者123 更新时间:2023-11-30 03:22:29 25 4
gpt4 key购买 nike

我正在开发一个 C/C++ 应用程序,其中我使用了打包的结构成员。我读过我们不应该将打包结构成员的地址传递给任何函数(我总是在通过引用函数作为参数传递打包结构成员时遇到对齐错误)。所以我想知道这是否适用于 sscanf 等内置函数。这是我的代码片段

#pragma pack(push,1)
struct A
{
char a;
short b;
int c;
};
#pragma pack(pop)

int main(int argc, char* argv[])
{
struct A abc;
char ch[100];
...
//read some data from file into character array ch
sscanf(ch,"%hu %d",&abc.b,&abc.c);
...

return 0;
}

我正在运行 Power PC 架构的应用程序。

最佳答案

sscanf 像任何其他函数一样访问数据字段,因此如果访问未正确对齐的数据导致异常,sscanf 也会失败。然而,一些架构允许未对齐的数据,它们只是访问此类数据比对齐的数据慢。

一般来说,假设有关数据对齐的任何事情都是一种不好的做法,会导致非常隐蔽的错误。只是不要那样做,总有更好(和更安全)的方法。

关于c++ - 打包结构成员的传递地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51106556/

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