关于C/C++不同进程读写文件问题

        在进程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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值