C语言子函数将结构体写入文件乱码
时间: 2024-01-20 16:03:24 浏览: 92
C语言中,将结构体写入文件可能出现乱码的情况,一般是因为结构体中包含了指针或者非字符类型的成员,在写入文件时需要进行额外的处理。以下是一种常用的处理方式:
1. 首先,将结构体成员逐个写入文件,而不是直接将整个结构体写入文件。这样可以避免指针和非字符类型的成员在写入文件时导致的问题。
2. 对于字符串类型的成员,使用`fwrite`函数将字符串以及字符串长度写入文件,而不是直接写入字符串指针。
3. 对于指针类型的成员,需要先将指针指向的内容写入文件,然后在读取时再重新分配内存并将内容读取到指针所指向的位置。这样可以确保指针在写入和读取过程中指向正确的内存位置。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[20];
int age;
} Person;
void writePerson(FILE* file, const Person* person) {
fwrite(person->name, sizeof(char), strlen(person->name) + 1, file);
fwrite(&(person->age), sizeof(int), 1, file);
}
void readPerson(FILE* file, Person* person) {
fread(person->name, sizeof(char), 20, file);
fread(&(person->age), sizeof(int), 1, file);
}
int main() {
FILE* file = fopen("person.dat", "wb");
if (file == NULL) {
printf("Failed to open file.\n");
return 1;
}
Person person = {"John Smith", 30};
writePerson(file, &person);
fclose(file);
file = fopen("person.dat", "rb");
if (file == NULL) {
printf("Failed to open file.\n");
return 1;
}
Person readPerson;
readPerson(file, &readPerson);
printf("Name: %s\n", readPerson.name); printf("Age: %d\n", readPerson.age);
fclose(file);
return 0;
}
```
这样处理后,写入文件时不会出现乱码的问题。读取时同样需要按照相同的方式进行读取,确保数据被正确还原。
阅读全文