c - 如何用C中的文件解决这个问题?
问题描述
由于某种原因,该函数loadPerson
总是0
作为输出返回。
我认为问题与 struct 中的变量 scores 有关PERSON
,但我不知道问题是什么。例如,我不知道保存函数是否会保存分数或地址的值(因为它是一个指针)。
你能帮我找出问题吗?
#include <stdlib.h>
#include <stdio.h>
#define N 3
typedef struct person{
int age;
float *scores;
} PERSON;
int savePerson(PERSON person, char *fileName){
FILE *file;
int result = 0;
file = fopen(fileName,"wb");
if (file){
if(fwrite(&person,sizeof(PERSON),1,file)>0){
result = 1;
}
}
return result;
}
int loadPerson(PERSON *person, char *fileName){
FILE *file;
int result = 0;
file = fopen(fileName,"rb");
if (file){
if(fread(person,sizeof(PERSON),1,file)>0){
result = 1;
}
}
}
int main()
{
char fileName[15] = "file1.bin";
float scores[3] = {2.0,8.0,9.0};
PERSON p1,p2;
int i;
p1.age = 35;
p1.scores = scores;
printf("Salvando\n");
if(savePerson(p1,fileName)){
printf("Saving OK!\n");
}
else{
printf("Saving BAD!\n");
}
if(loadPerson(&p2,fileName)){
printf("Loading OK!");
printf("AGE: %d\n",p2.age);
printf("SCORES:\n");
for(i=0;i<N;i++){
printf("%f,",p2.scores[i]);
}
printf("\n");
}
else{
printf("Loading BAD!");
}
return 0;
}
解决方案
查看函数原型:您在函数末尾int loadPerson(PERSON *person, char *fileName)
忘记了。return result;
同样,一旦解决了这个问题,您将在尝试将数组写入文件时遇到问题。您可能希望将结构更新为以下内容:
typedef struct person{
int age;
float scores[N];
} PERSON;
推荐阅读
- android - Flutter应用中点击关闭App的通知时,如何打开应用并调用首页函数?
- git - 樱桃采摘到多个分支机构
- php - 如何减少 TTFB(到第一个字节的时间)响应?
- delphi - RAD Studio:启动 IDE 时出错。如何纠正这个?
- apache-spark-sql - Spark 创建的用于从 S3 读取输入表的任务
- azure-functions - IDurableOrchestrationContext.SetCustomStatus 不会立即更新状态
- ruby-on-rails - 通过控制台访问翻译表
- reactjs - 改变 a 的背景颜色与 useRef 反应
- nginx - Nginx Lua 扩展读取多部分形式的正文,使其保持完整(代理)
- rust - 使用 serde 将枚举变量的名称作为字符串获取