我正在开发一个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体系结构的应用程序。
答案 0 :(得分:2)
sscanf会像访问其他任何函数一样访问数据字段,因此,如果对不正确对齐的数据的访问导致异常,sscanf也会失败。但是,某些架构允许未对齐的数据,它们访问此类数据的速度比对齐的数据慢。
通常,假设任何有关数据对齐的做法都是错误的做法,这会导致非常模糊的错误。只是不要这样做,总会有更好(更安全)的方式。