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