学生程序员在这里。我无法从C中的二进制文件中读取输入。存储在文件中的数据是如下所示的结构:
typedef struct reserve{
char *name;
char *ic;
int room_number;
} Reserve;
当我将结构写入二进制文件时,我没有问题。这是我写入文件的代码:
void reg_new() //Make a new reservation
{
Reserve newReserve = {"", "", 0};
char name[NAMEFIELD], ic[ICFIELD];
int room_number;
FILE *resvptr;
scanf_s("%s", name, NAMEFIELD);
scanf_s("%s", ic, ICFIELD);
scanf_s("%d", &room_number);
newReserve.name = name;
newReserve.ic = ic;
newReserve.room_number=room_number;
resvptr = fopen("reservations.dat", "wb");
fwrite(&newReserve, sizeof(Reserve), 1, resvptr);
fclose(resvptr);
}
以及从文件读取的代码:
void reg_view() //view a reservation.
{
FILE *seekptr;
Reserve viewReserve = {"", "", 0};
int read;
if ( (seekptr = fopen("reservations.dat", "rb")) == NULL)
{
puts("Error: file could not be found.");
}
else
{
while ( !feof(seekptr))
{
read = fread(&viewReserve, sizeof(Reserve), 1, seekptr);
if(read != 0)
{
printf("Name: %s\nIC number: %s\nRoom Number: %d\n", viewReserve.name, viewReserve.ic, viewReserve.room_number);
}
}
fclose(seekptr);
}
写入二进制文件并访问该函数以进行读取后,房间号(具有int值)会很好地读取,但是两个字符串(名称和IC号)却作为垃圾字符读出。随后,关闭并重新启动程序,然后尝试从文件中读取将给我访问冲突和错误的指针错误。
问题在于从文件中读取字符串。我怀疑有内存泄漏,但是我不能肯定地说...有人可以帮忙吗?谢谢。
您正在写指向文件的指针,而不是实际数据。当您从文件中读取指针时,它只是您可能无法访问的内存地址,即使您是在与写入文件相同的过程中进行访问的(因为它实际上是指向函数作用域的堆栈的指针)多变的)。
如果要以这种方式存储记录,请使函数存储实际的字符串数据而不是指针:
typedef struct reserve{
char name[NAMEFIELD];
char ic[ICFIELD];
int room_number;
} Reserve;
只需执行以下操作:
scanf_s("%s", newReserve.name, NAMEFIELD);
scanf_s("%s", newReserve.ic, ICFIELD);
scanf_s("%d", &newReserve.room_number);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句