* 有个Bug始终未解决:是有关文件读写的:不知道是怪异还是。哎,有人摸索出了帮忙回答上
*. 有个Bug始终未解决:是有关文件读写的:不知道是怪异还是。。。哎,有人摸索出了帮忙回答下
以二进制方式写入:先写入一个,结构体,再写入一串字符串,然后写入一个unsigned char 类型的Oxff字符(用作分隔)
结构体如下:
typedef struct Msg //这个结构体就按照这个样子编排顺序了,因为乱编排会导致读取数据不准确,搞不懂。
{
char strtime[20];//日期
int mode;//模式
bool isReceive ;//是否接收方,true ; 发送信息方,false
}Struct_Msg;
字符串是不定长的; 最后再写个Oxff字符进去。
问题就出来了:当我读取的时候,结构体中的 mode有时候与写入进去的值不一样:比如写入时mode = 0; 读出确实1326。。。。怎么搞的呢?求解。
------解决方案--------------------
写入结构体的时候,需要用紧凑模式,这样#pragma pack(1)设置,参考如下代码:
以二进制方式写入:先写入一个,结构体,再写入一串字符串,然后写入一个unsigned char 类型的Oxff字符(用作分隔)
结构体如下:
typedef struct Msg //这个结构体就按照这个样子编排顺序了,因为乱编排会导致读取数据不准确,搞不懂。
{
char strtime[20];//日期
int mode;//模式
bool isReceive ;//是否接收方,true ; 发送信息方,false
}Struct_Msg;
字符串是不定长的; 最后再写个Oxff字符进去。
问题就出来了:当我读取的时候,结构体中的 mode有时候与写入进去的值不一样:比如写入时mode = 0; 读出确实1326。。。。怎么搞的呢?求解。
------解决方案--------------------
写入结构体的时候,需要用紧凑模式,这样#pragma pack(1)设置,参考如下代码:
- C/C++ code
#include <stdio.h> #include <string.h> #pragma pack(1) typedef struct { char time[20]; int mode; unsigned char recv; }msg_t; int main(int argc, char* argv[]) { msg_t msg1 = {"test", 0, 1}; msg_t msg2; FILE* file; if((file = fopen("40.bin", "wb")) == NULL) return -1; fwrite(&msg1, sizeof(msg_t), 1, file); fclose(file); if((file = fopen("40.bin", "rb")) == NULL) return -1; fread(&msg2, sizeof(msg_t), 1, file); fclose(file); printf("(%s, %d, %d)\n", msg2.time, msg2.mode, msg2.recv); return 0; }
------解决方案--------------------
请把源程序贴出来
------解决方案--------------------
应该是字节没有对齐,可以用#pragma pack设置与开发环境字节对齐方式匹配。