我只是想在二進制文件中寫一個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;
}
還有就是我的日誌:
/家庭/ sviktor/CLionProjects /無/ cmake的建造,調試/無Entrez的 UNE valeur倒X:2.33 Entrez的UNE valeur倒Y:1.34樂point est auxcoordonnées(x,y)=(2.33,1.34)。 Entrezcoordonnées(x,y)=(0.00,0.00)。讀取返回:0 Le est est auxcoordonnées(x,y)=(0.00,0.00)。
過程完成,退出代碼爲0
我工作的Fedora和克利翁IDE,
祝福編輯說,我的test123.bin文件包含此C4 2E 18 F1 FC 7F 00 00
但讀功能無法正常工作(它給點=(0,0))
如果使用hexeditor檢查輸出文件,您會看到什麼?它寫的是否正確? – Retr0id
「不工作」是什麼意思? – nicomp
當調用'fread'和'fwrite'時,嘗試傳遞'p'而不是'&p'作爲第一個參數。 'p'是結構的地址; '&p'是保存結構地址的指針變量的地址。我猜想後者有點太過分了。 –