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

二进制文件存取有关问题高分急需

2012-08-13 
二进制文件存取问题高分急需C/C++ codevoid save(struct tell_list *head)//存{struct tell_list *pstruc

二进制文件存取问题高分急需

C/C++ code
void save(struct tell_list *head)     //存{    struct tell_list *p;    struct tell_list m;    FILE * fp;    fp = fopen( "people.dat" , "ab" );    if( fp == NULL )    {        printf("文件打开失败。");        exit(0);    }    p = head ;    while ( p != NULL )    {        m = *p;        m.next = NULL;        fwrite( &m , sizeof(struct tell_list) , 1 , fp );        p = p -> next;    }    fclose(fp);}/******************************************************************************************************************************/struct tell_list *read(void)   //取{    struct tell_list *head,*p,*q;    struct tell_list m;    int size,i,j;    FILE * fp;    head = NULL;    fp = fopen( "people.dat" , "rb" );    if( fp == NULL)    {        printf("文件打开失败。");        exit(0);    }    fseek( fp , 0L , 2 );    size = ftell(fp);    j = sizeof(struct tell_list);    for( i = 1 ; i <= size ;i += j )    {        p = (struct tell_list *)malloc(sizeof(struct tell_list));        if( p == NULL)        {            printf("分配空间不足!");            exit(0);        }        fread( &m , sizeof(struct tell_list) , 1 , fp );        m.next = NULL;        *p = m;        p -> next =NULL;        if( head == NULL )            head = p;        else        {            q = head;            while ( q -> next != NULL )            {                q = q -> next;            }            q -> next = p;        }    }    fclose(fp);    return (head);}
存取都是乱码求指点速度阿
这是结构体
C/C++ code
struct tell_list{        int  id;    char name[11];    char sex[5];    int  age;    char tell[20];    char address[60];    char mail[30];    char relative[20];    struct tell_list *next;};


[解决办法]
你使用fseek( fp , 0L , 2 );把指针移动到文件尾求文件的大小,在读内容的时候得记得回复文件的指针到文件头啊。

热点排行