首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

* 有个Bug始终未解决:是有关文件读写的:不知道是怪异还是。哎,有人摸索出了帮忙回答上

2012-09-24 
*. 有个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)设置,参考如下代码:

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设置与开发环境字节对齐方式匹配。

热点排行