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

初学者关于fread()函数读取结构体的有关问题

2012-09-16 
菜鸟关于fread()函数读取结构体的问题这是一个读入电脑里二进制文件的程序,然后把文件里的数据存入一个结

菜鸟关于fread()函数读取结构体的问题
这是一个读入电脑里二进制文件的程序,然后把文件里的数据存入一个结构体中,再把其中的元素按一定顺序打印出来。二进制文件的存储方式是一个char一个int这样,代码如下:

C/C++ code
#include "stdafx.h"#include <stdlib.h>struct lyrics{    char character;    int order;}lyc[2506],temp;int _tmain(int argc, _TCHAR* argv[]){    FILE *fp;    int i,j,k;    if((fp=fopen("d:\\a\\Encode2.da","rb"))==NULL){        printf("file open error.\n");        exit(0);    }    for(i=0;i<2507;i++){        fread(&lyc[i].character,1,1,fp);  //主要是这里        fread(&lyc[i].order,4,1,fp);    }    for(j=0;j<i-1;j++){        for(k=j;k<i;k++){            if(lyc[k].order<lyc[j].order){                temp=lyc[k];                lyc[k]=lyc[j];                lyc[j]=temp;            }        }    }    for(j=0;j<i;j++)        printf("%c",lyc[j].character);    printf("\n");    fclose(fp);    return 0;}

这样可以成功读取没问题,但是换成下面这种方式,整体读入这个结构体,在输出的时候就会成为一堆乱码,为什么呢?
C/C++ code
for(i=0;i<2507;i++){        fread(&lyc[i],sizeof(struct lyrics),1,fp);}

但是我看很多程序是可以直接这样整体读取一个结构体的。

[解决办法]
内存对齐的问题,char后面填充了3个空白字节导致错位了
[解决办法]
探讨

内存对齐的问题,char后面填充了3个空白字节导致错位了

热点排行