我有一个Person
STRUCT如下所示:fread无法读取一个unsigned int? [C]
typedef struct Person {
char name[NUM_CHARS];
unsigned int age;
} Person;
其中#define NUM_CHARS 20
。
我想写这种结构为二进制文件,所以我写了两个函数来处理:
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
来,我已经事先建立好一个空白文件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);
}
问题是什么?
您可能想更改'readPerson'中的注释:) :) –