我工作了2个小时,我在Google上搜索,但答案没有到,所以我问你!希望在某人的帮助下。当我尝试打印我的结构时,我只得到一个结构空(结构被正确创建,填充并存储在文件中)
我的结构是这样的:
typedef struct
{
int serial_number;
char name [20];
char surname [20];
char sex[1];
int dd;
int mm;
int yyyy;
} Person;
这是print_file函数
int print_file()
{
FILE *f;
f = fopen("civil_registry.dat", "rb");
if (!f)
{
error("Error on opening file, should be missing!");
return 1;
}
Person *tmp;
tmp = malloc(sizeof(Person));
fseek(f, 0, SEEK_END);
int length_of_file = ftell(f);
while(length_of_file)
{
fread(tmp, sizeof(Person), 1, f);
print(tmp);
length_of_file = length_of_file - 64;
}
fclose(f);
return 0;
}
这里打印功能正常(我认为):
int print(Person *tmp)
{
printf("\n\nSerial Number: %i", tmp->serial_number);
printf("\nName: %s", tmp->name);
printf("\nSurname: %s", tmp->surname);
printf("\nSex: %s", tmp->sex);
printf("\nDay: %i", tmp->dd);
printf("\nMonth: %i", tmp->mm);
printf("\nYear: %i", tmp->yyyy);
return 0;
}
答案 0 :(得分:1)
代码中有未定义的行为。
char sex[1] ;
在函数print
-
printf("\nSex: %s", tmp->sex); // %s would expect a null terminated string
如果您在sex
中输入字符,则'\0'
没有空格。
因此将其大小增加到char sex[2]
。
答案 1 :(得分:0)
@ameyCU 所以,我解决了你发布的所有问题!但是我无法正确读取二进制文件,因为我将64字节写入64字节,而我的输出是struct,所有值都为0或NULL