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

比如:#include<string>struct student{string name;string num;string age;};
2024-11-28 08:07:23
推荐回答(4个)
回答1:

代码样例:

#include 
#include
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());
}

执行结果:

回答2:


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

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

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

3、关闭文件指针

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

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

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

3、关闭文件指针

参考代码如下:

#include
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:文件指针。

回答3:

这string 保存的如果是串地址就麻烦了;
我用的C++BUILDER好象不支持string,
否则,邦你试一下了。

回答4:

#include
using namespace std;

int main() {
student s;
s.name = "name";
ofstream of("output.txt");
of<of.close();
return 0;
}