读书人

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

发布时间: 2012-08-13 13:21:53 作者: rapoo

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

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 );把指针移动到文件尾求文件的大小,在读内容的时候得记得回复文件的指针到文件头啊。

读书人网 >C语言

热点推荐