打包结构成员的传递地址
passing address of packed struct member
我正在开发一个 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/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 也会失败。然而,一些架构允许未对齐的数据,它们只是访问此类数据比对齐的数据慢。
一般来说,假设任何关于数据对齐的事情都是一种不好的做法,会导致非常隐蔽的错误。只是不要那样做,总有更好(更安全)的方法。