次のようなPerson
構造体があります。
typedef struct Person {
char name[NUM_CHARS];
unsigned int age;
} Person;
どこで#define NUM_CHARS 20
。
この構造をバイナリ ファイルに書き込みたいので、それを処理する 2 つの関数を作成しました。
int writePerson(Person* person, FILE* _fp) {
int i = 0;
int count = 0;
int len = strlen(person->name);
// Write name
for(i = 0; i < len+1; i++) {
count += fwrite(&(person->name[i]), sizeof(char), 1, _fp);
// fseek(_fp, 1, SEEK_CUR);
}
// Continue
// Write age
count += fwrite(&(person->age), sizeof(unsigned int), 1, _fp);
return count;
}
int readPerson(Person* person, FILE* _fp) {
int i = 0;
int count = 0;
// Write name
for(i = 0;person->name[i] != NULL;i++) {
count += fread(&(person->name[i]), sizeof(char), 1, _fp);
}
// Continue
// Write age
count += fread(&(person->age), sizeof(unsigned int), 1, _fp);
return count;
}
そこで、事前に作成Person
した空のファイルに aを書きました。Px.bin
int main() {
FILE* fp = fopen("Px.bin", "r+b");
Person person = {"Billie", 40};
// Person y ;
int x = writePerson(&person, fp);
printf("%d", x);
// printPerson(&y);
getchar();
fcloseall();
return 0;
}
うまくいくようです、印刷し8
ます。
しかし、このファイルを読み込もうとすると:
int main() {
FILE* fp = fopen("Px.bin", "r+b");
// Person person = {"Billie", 40};
Person y ;
int x = readPerson(&y, fp);
printf("%d\n", x);
printPerson(&y);
getchar();
fcloseall();
return 0;
}
私はこの結果を得ています:
11
Billie
-858993460
printPerson の場所:
void printPerson(Person* p) {
printf("%s\n%d\n", p->name, p->age);
}
何が問題ですか?