我只是想在二进制文件中编写一个Point结构并阅读书面结构。
有人可以解释一下为什么这段代码无效吗?
#include<stdio.h>
#define N 100
typedef struct Point Point;
struct Point{
float x;
float y;
};
void initialisePoint(Point * p);
void showPoint(Point * p);
void initialiseFileName(char * fileName);
int writePointToFile(char * fileName, Point * p);
int readPointFromFile(char * fileName, Point * p);
int main()
{
Point p1 = {0};
Point p2 = {0};
char fileName[N] = {0};
int exitStatus = 0;
initialisePoint(&p1);
showPoint(&p1);
initialiseFileName(fileName);
printf("Vous avez entré : %s\n", fileName);
printf("Write return : %d\n", writePointToFile(fileName, &p1));
printf("Read return : %d\n", readPointFromFile(fileName, &p2));
showPoint(&p2);
return exitStatus;
}
void initialisePoint(Point * p){
printf("Entrez une valeur pour x : ");
scanf("%f", &p->x);
printf("Entrez une valeur pour y : ");
scanf("%f", &p->y);
}
void showPoint(Point * p){
printf("Le point est aux coordonnées (x,y) = (%.2lf, %.2lf).\n", p->x, p->y);
}
void initialiseFileName(char * fileName){
printf("Entrez une valeur pour le nom de fichier : ");
scanf("%s", fileName);
}
int writePointToFile(char * fileName, Point * p)
{
FILE* f2 = NULL;
f2 = fopen(fileName, "wb");
if(f2 != NULL){
if(fwrite(&p, sizeof(struct Point), 1, f2) != 1){
printf("Could not write to file.");
fclose(f2);
return -1;
}
}
else
{
printf("Could not open file.");
return -1;
}
fclose(f2);
return 0;
}
int readPointFromFile(char * fileName, Point * p){
FILE* f = NULL;
f = fopen(fileName, "rb");
if(f != NULL){
if(fread(&p, sizeof(struct Point), 1, f) != 1){
printf("Could not read from file.");
fclose(f);
return -1;
}
}
else{
printf("Could not open file.");
return -1;
}
fclose(f);
return 0;
}
有我的日志:
/ home / sviktor / CLionProjects / untitled / cmake-build-debug / untitled Entrez une valeur pour x:2.33 Entrez une valeur pour y:1.34 Le point est auxcoordonnées(x,y)=(2.33,1.34)。 Entrez une valeur pour le nom de fichier:test123.bin Vousavezentré:test123.bin写回程:0 读取返回:0 Le point estauxcoordonnées(x,y)=(0.00,0.00)。
处理完成,退出代码为0
我正在研究Fedora和clion IDE,
Bless编辑说我的test123.bin文件包含这个C4 2E 18 F1 FC 7F 00 00
但读取函数不起作用(它给出了点=(0,0))
答案 0 :(得分:3)
由于您的writePointToFile()
和readPointFromFile()
函数接受指向Point
结构的指针,因此您希望将该指针传递给fread
和fwrite
。它是您数据的指针,这是您想要读写的内容。您的代码错误地将指针传递给该指针。
换句话说,在writePointToFile()
中,您想要更改通话
fwrite(&p, sizeof(struct Point), 1, f2)
到
fwrite(p, sizeof(struct Point), 1, f2)
,同样适用于fread
中的readPointFromFile()
来电。