[英]Reading and writing structure to binary file in C, then print structure elements
我想將結構寫入程序A中的二進制文件,然后在程序B中從中讀取,從而將結構打印出來。 但是,我得到的輸出不正確。
我嘗試在程序A中進行fwrite,然后在程序B中進行fread,然后隨后使用printf打印輸出,只是得到了一個無意義的數字字符串。
程序A:
#include <stdio.h>
#include <stdlib.h>
struct record
{
int index;
char name [100];
int age;
};
int main ()
{
struct record *one=malloc(sizeof(struct record));
FILE *in=fopen("records.bin", "ab+")l
fgets(one->name, 100, stdin);
one->index=100;
one->age=50;
fwrite(&one, sizeof(struct record), 1, in);
fclose(in);
}
程序B(所有標頭和結構相同,帶有以下代碼):
int main ()
{
FILE *in=fopen("records.bin", "rb+");
struct record array;
fread (&array, sizeof(struct record), 1, in);
printf ("%d\n", array.index);
printf ("%s\n", array.name);
printf ("%d\n", array.age);
fclose(in);
}
我期望輸出是
100
j
50
但是實際輸出是172400800
您正在將垃圾寫入文件,因為您使用的是指針的指針 ,而不是指針。
因此,您可以進行快速修復:
fwrite(one, sizeof(struct record), 1, in);
或者您可以重寫以避免分配,這可能是一個好主意,因為在這里它完全沒有必要:
#include <stdio.h>
#include <stdlib.h>
struct record
{
int index;
char name [100];
int age;
};
int main ()
{
struct record one;
FILE *in = fopen("records.bin", "ab+");
fgets(one.name, 100, stdin);
one.index=100;
one.age=50;
fwrite(&one, sizeof(struct record), 1, in);
fclose(in);
}
另外需要注意的是,您實際上應該轉向具有內在含義的變量名稱。 one
沒有意義。 即使有些模棱兩可, r
還是一個改進,因為至少“ r”表示與“記錄”相關的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.