动态声明结构体并进行Fwrite/Fread操作的示例代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[20];
float score;
} Student;
int main() {
int numStudents = 3;
// 动态声明结构体数组
Student* students = (Student*)malloc(numStudents * sizeof(Student));
// 初始化结构体数组
students[0].id = 1;
strcpy(students[0].name, "Alice");
students[0].score = 90.5;
students[1].id = 2;
strcpy(students[1].name, "Bob");
students[1].score = 85.0;
students[2].id = 3;
strcpy(students[2].name, "Charlie");
students[2].score = 95.5;
// 将结构体数组写入文件
FILE* file = fopen("students.dat", "wb");
if (file != NULL) {
fwrite(students, sizeof(Student), numStudents, file);
fclose(file);
}
// 从文件中读取结构体数组
Student* readStudents = (Student*)malloc(numStudents * sizeof(Student));
file = fopen("students.dat", "rb");
if (file != NULL) {
fread(readStudents, sizeof(Student), numStudents, file);
fclose(file);
}
// 打印读取的结构体数组
for (int i = 0; i < numStudents; i++) {
printf("Student %d: id=%d, name=%s, score=%.1f\n", i+1, readStudents[i].id, readStudents[i].name, readStudents[i].score);
}
// 释放内存
free(students);
free(readStudents);
return 0;
}
上述代码首先动态声明了一个包含学生信息的结构体数组,然后初始化了数组中的每个元素。接着,使用fwrite
函数将结构体数组写入名为"students.dat"的二进制文件中。
然后,使用fread
函数从文件中读取结构体数组,并将读取的数据存储在另一个动态声明的结构体数组中。最后,使用循环遍历新的结构体数组,并打印每个学生的信息。
最后,记得释放动态分配的内存。