从C中的二进制文件读取字符串时发生访问冲突

用户名

学生程序员在这里。我无法从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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭程序后如何从二进制文件中读取字符串

来自分类Dev

如何从二进制文件读取字符串/数组和int in c?

来自分类Dev

c ++使用fstream从二进制文件读取字符串

来自分类Dev

如何从二进制文件读取字符串?

来自分类Dev

在MATLAB中读取字符串和整数并将其写入二进制文件

来自分类Dev

读取二进制文件中的字符串C ++

来自分类Dev

在C ++中将二进制字符串输出到二进制文件

来自分类Dev

如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

来自分类Dev

如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

来自分类Dev

从二进制文件读取会导致访问冲突

来自分类Dev

将二进制文件中的数据读取到C中的链接列表中(访问冲突读取位置)

来自分类Dev

替换二进制文件中的字符串

来自分类Dev

如何从二进制文件中读取以nul结尾的字符串

来自分类Dev

从二进制文件读取以null结尾的字符串C ++

来自分类Dev

C:从二进制文件读取字节

来自分类Dev

C:从二进制文件读取字节

来自分类Dev

从txt文件中读取字符、编码并写入二进制文件

来自分类Dev

如何将二进制文件的内容放在c中的字符串中?

来自分类Dev

使用C ++在二进制文件中搜索字符串

来自分类Dev

使用 C# 在文件中存储字符串索引的二进制数据

来自分类Dev

如何在Shell中获取字符串的二进制表示形式?

来自分类Dev

如何从vb.net中的二进制文件读取vb6定长字符串

来自分类Dev

将二进制字符串(ASCII)转换为二进制文件

来自分类Dev

将大二进制字符串写入二进制文件

来自分类Dev

将二进制文件读取为字符串,但类型混合

来自分类Dev

将二进制文件读取为字符串,但类型混合

来自分类Dev

如何以1和0的字符串序列读取二进制文件?

来自分类Dev

将从二进制文件读取的字符串转换为整数

来自分类Dev

将字符串中的十进制转换为二进制时出错

Related 相关文章

  1. 1

    关闭程序后如何从二进制文件中读取字符串

  2. 2

    如何从二进制文件读取字符串/数组和int in c?

  3. 3

    c ++使用fstream从二进制文件读取字符串

  4. 4

    如何从二进制文件读取字符串?

  5. 5

    在MATLAB中读取字符串和整数并将其写入二进制文件

  6. 6

    读取二进制文件中的字符串C ++

  7. 7

    在C ++中将二进制字符串输出到二进制文件

  8. 8

    如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

  9. 9

    如何从C#的BinaryWriter创建的二进制文件中读取php中的字符串

  10. 10

    从二进制文件读取会导致访问冲突

  11. 11

    将二进制文件中的数据读取到C中的链接列表中(访问冲突读取位置)

  12. 12

    替换二进制文件中的字符串

  13. 13

    如何从二进制文件中读取以nul结尾的字符串

  14. 14

    从二进制文件读取以null结尾的字符串C ++

  15. 15

    C:从二进制文件读取字节

  16. 16

    C:从二进制文件读取字节

  17. 17

    从txt文件中读取字符、编码并写入二进制文件

  18. 18

    如何将二进制文件的内容放在c中的字符串中?

  19. 19

    使用C ++在二进制文件中搜索字符串

  20. 20

    使用 C# 在文件中存储字符串索引的二进制数据

  21. 21

    如何在Shell中获取字符串的二进制表示形式?

  22. 22

    如何从vb.net中的二进制文件读取vb6定长字符串

  23. 23

    将二进制字符串(ASCII)转换为二进制文件

  24. 24

    将大二进制字符串写入二进制文件

  25. 25

    将二进制文件读取为字符串,但类型混合

  26. 26

    将二进制文件读取为字符串,但类型混合

  27. 27

    如何以1和0的字符串序列读取二进制文件?

  28. 28

    将从二进制文件读取的字符串转换为整数

  29. 29

    将字符串中的十进制转换为二进制时出错

热门标签

归档