某C++项目需要解析json文件,使用了cJSON,结果在解析json时每一步都没有错误,但莫名其妙的是解析出来的所有数值都是0,代码写得肯定没问题,同样的代码拿到其他项目里运行正常。查了一下午没找到原因,最后才发现是因为某个头文件里使用了#pragma pack(1)指定按字节对齐方式定义了一个struct,但之后忘记恢复缺省对齐方式,就是这个原因导致cJSON功能不正常,加上恢复对齐方式后cJSON解析结果就正确了。所以切记在使用#pragma pack改变对齐方式定义数据结构后一定要恢复原有的对齐方式,有两种方法:
方法1:
使用 #pragma pack() 恢复缺省对齐方式;
方法2:
使用 #pragma pack(push,n) 在改变对齐方式的同时把原来的对齐方式压栈,
之后再使用 #pragma pack(pop) 恢复原来的对齐方式。
本文揭示了一个C++项目中使用cJSON解析JSON时遇到的奇异性问题:对齐设置导致解析失败。解决办法在于理解并恢复数据结构对齐,通过#pragmapack()或堆栈管理确保正确对齐。
2328

被折叠的 条评论
为什么被折叠?



