打包结构成员的传递地址

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 也会失败。然而,一些架构允许未对齐的数据,它们只是访问此类数据比对齐的数据慢。

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