微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法从 c 中的不同函数检索 GDBM 数据库中的数据

如何解决无法从 c 中的不同函数检索 GDBM 数据库中的数据

嗨,我正在尝试开发带有嵌入式数据库的 3 层服务器。

我的问题是我能够将数据保存在 gdbm 数据库中,但是当我尝试从其他函数检索数据时,它总是返回空值。 我还指出了一个问题,即在我保存数据时键值的空终止(通过 gdb 输出验证)键不以 \0 结尾,但在检索数据时它以 \0 终止,我对此不太确定理论,不知道如何解决

我尝试过的事情:

  • 尝试手动添加空字符但没有成功
  • 厌倦了从键中删除空字符,但它仍然不起作用。
  • 尝试从相同的结构中获取密钥,希望问题可能是由于不同的格式,但没有奏效
  • 尝试替换空字符但没有帮助,因为我不知道我做错了什么以及为什么在保存数据时没有空字符。

我已附上重现相同错误的最低代码,希望有人指出我的错误,同时我仍会尝试解决此问题,但您的指南可能会有所帮助。

代码

    @Column({
        nullable: true
    })
    author: User;

解决方法

问题很可能是您使用 accountNumber 数组的整个(以及更多!)作为键,甚至字符串空终止符之外的部分将未初始化和具有不确定的值。

因此,您写入时使用的密钥可能与读取数据时使用的密钥不完全相同。

解决方案是确保所有的 accountNumber 数组在将字符串复制到它之前都将被初始化(如在 memset(data.accountNumber,sizeof data.accountNumber) 中)。


例如的问题

bzero(id,STR_SIZE);
// ...
strcpy(data.accountNumber,id);

strcpy 不会复制超出字符串空终止符的数据,因此它不会复制完整数组 id,仅复制其中的一小部分。这将使 data.accountNumber 的其余元素未初始化。

您必须初始化 data.accountNumber 本身。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。