您的位置:

c语言结构体读写到二进制文件,C++二进制文件的读取与写入

本文目录一览:

C语言 结构体指针字符 二进制文件写入和读取

当然不对了,你的结构体成员,是一个指针

sizeof(student) ,win32是4字节,win64是8字节

当读入其中4个或8个字节时,它指向的指针地址并不一定存在

你可以定义为一个字符数组

c语言中怎么把一个结构体数组写入文件

C语言把一个结构体数组写入文件分三步:

1、以二进制写方式(wb)打开文件

2、调用写入函数fwrite()将结构体数据写入文件

3、关闭文件指针

相应的,读文件也要与之匹配:

1、以二进制读方式(rb)打开文件

2、调用读文件函数fread()读取文件中的数据到结构体变量

3、关闭文件指针

参考代码如下:

#includestdio.h

struct stu {

char name[30];

int age;

double score;

};

int read_file();

int write_file();

int main()

{

if ( write_file()  0 ) //将结构体数据写入文件

return -1;

read_file(); //读文件,并显示数据

return 0;

}

int write_file()

{

FILE *fp=NULL;

struct stu student={"zhang san", 18, 99.5};

fp=fopen( "stu.dat", "wb" ); //b表示以二进制方式打开文件

if( fp == NULL ) //打开文件失败,返回错误信息

{

printf("open file for write error\n");

return -1;

}

fwrite( student, sizeof(struct stu), 1, fp ); //向文件中写入数据

fclose(fp);//关闭文件

return 0;

}

int read_file()

{

FILE *fp=NULL;

struct stu student;

fp=fopen( "stu.dat", "rb" );//b表示以二进制方式打开文件

if( fp == NULL ) //打开文件失败,返回错误信息

{

printf("open file for read error\n");

return -1;

}

fread( student, sizeof(struct stu), 1, fp ); //读文件中数据到结构体

printf("name=\"%s\" age=%d score=%.2lf\n", student.name, student.age, student.score ); //显示结构体中的数据

fclose(fp);//关闭文件

return 0;

}

fwrite(const void*buffer,size_t size,size_t count,FILE*stream);

(1)buffer:指向结构体的指针(数据首地址)   

(2)size:一个数据项的大小(一般为结构体大小)

(3)count: 要写入的数据项的个数,即size的个数   

(4)stream:文件指针。

C语言编程学生信息结构体,保存文本文件或二进制文件中.求大神知道啊。

你需要用到打开文本或者创建一个文本写入相关的知识,当然还有结构体;

(“结构体”跟“C语言文件”请自行百度百科)

//首先定义学生结构体

struct strudent{

int score;

int num;}

然后当然他有各种数据

然后在main()函数中用到fopen;

*f=fopen("x://student.txt,w);用‘w’打开的话若没有文件会创建一个文件;

if(f=NULL)//判断打开是否失败

printf("打开失败");//接下去就是写入,你可以使用二进制文件操作

******下面是资料*****

3.1 数据块存取函数

函数原型:

_CRTIMP size_t __cdecl fread(void *, size_t, size_t, FILE *);

_CRTIMP size_t __cdecl fwrite(const void *, size_t, size_t, FILE *);

当要求一次存取一组数据(如,一个数组、一个结构体变量的值),fread和fwrite函数可以解决该类问题。它们的调用形式一般为:

fread(buffer, size, count, fp);

fwrite(buffer, size, count, fp);

buffer:对于fread来说,指的是读入数据的存放地址;对于fwrite来说,是要输出数据的地址。

size:读写数据时,每笔数据的大小

count:读写数据的笔数

**********************

所以剩下的就是

fwrite(student_1, sizeof(student), 1, f);

当然,为了更好的存储数据,你完全可以把student设计成数组。够了吧,需要用到的资料百度百科或者个人博客上都有,我连关键字都留给你了。手打~

c++中如何向二进制文件读写含有string类型的结构体变量

代码样例:

#include stdio.h

#includestring

using namespace std;

struct student

{

string name;

string num;

string age;

};

void main()

{

    FILE *fp;

    char *buf, *p;

    int nfileSize;

    char terminator = 0;

    struct student src;

    struct student dst;

    src.name = "nihao";

    src.num = "123456";

    src.age = "18";

    //写入文件

    fp = fopen("data.txt", "wb+");

    fwrite(src.name.c_str(), 1, src.name.length(), fp);

    fwrite(terminator, 1, 1, fp);

    fwrite(src.num.c_str(), 1, src.num.length(), fp);

    fwrite(terminator, 1, 1, fp);

    fwrite(src.age.c_str(), 1, src.age.length(), fp);

    fwrite(terminator, 1, 1, fp);

    fclose(fp);

    //从文件中读取

    fp = fopen("data.txt", "rb");

    fseek(fp, 0, SEEK_END);

    nfileSize = ftell(fp);

    fseek(fp, 0, SEEK_SET);

    buf = (char*)malloc(nfileSize);

    fread(buf, 1, nfileSize, fp);

    p = buf;

    dst.name = p;

    p = p + strlen(p) + 1;

    dst.num = p;

    p = p + strlen(p) + 1;

    dst.age = p;

    free(buf);

    fclose(fp);

    printf("Name: %s\nNum: %s\nAge:%s\n", dst.name.c_str(), dst.num.c_str(), dst.age.c_str());

}

执行结果: