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