压缩结构成员的传递地址

时间:2018-06-29 17:10:34

标签: c++ powerpc pragma-pack

我正在开发一个C / C ++应用程序,其中我在使用打包的struct成员。我已经读过,我们永远不要将打包结构成员的地址传递给任何函数(当通过引用函数作为参数传递打包结构成员时,我总是会遇到对齐错误)。所以我想知道这是否适用于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体系结构的应用程序。

1 个答案:

答案 0 :(得分:2)

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

通常,假设任何有关数据对齐的做法都是错误的做法,这会导致非常模糊的错误。只是不要这样做,总会有更好(更安全)的方式。