在进程A中利用C按结构体内容写入到文件,而进程B为C++所写,如界面进程,需要读取A所写的文件内容,再在界面显示,有时可能会遇见这种情况:在A中写入完成后再在A中打印测试写入的内容读出的情况,一切都没问题,不管是写还是读,数据信息都OK.当将C中对应的结构体复制到C++中时,(甚至相同的读函数)读取文件,发现数据不大对劲,有些对有些错,换种读取方式还是其他?
要解决问题还是需要先找到原因为上,不然这次可能凑巧解决了问题,但是还是不明所以,下次碰到类似的情况还是一头懵逼,可能之前的方法也已不起效果(有点废话。。)。
此种情况比较大的原因可能就是两种语言下编译器编译的方式及结构体内存对齐方式不一致导致。比较推荐的方法就是如下列代码段所表示的,在C和C++中结构体的最上方和最下方方便加上#pragma pack(n)及#pragma pack(),这样就指示编译器按n字节对齐方式编译,n一般用的较多的值为1,在C++中外面最好再加一层以C方式编译的extern "C".
#ifdef __cplusplus
extern "C"
{
#endif
#pragma pack(1)
typedef struct XXX{
//结构体内容
} xxx;
#pragma pack()
#ifdef __cplusplus
}
#endif