gpt4 book ai didi

c - 用于读取数据库的损坏的 C 代码

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:42 24 4
gpt4 key购买 nike

我有一段代码,用 C 语言从 passwd 风格的数据库中读取条目:

do {
if (fscanf(db, "%s:%s:%d", uname, passwd, &gid) == EOF) {
return NULL;
}
} while (strcmp(uname, username));

但是,当运行它时,它给出了段错误。在调试器中运行后,我发现 strcmp 部分是引发段错误的部分。数据类型:

  • dbFILE *,已经打开。
  • unamepasswd都是char *,都初始化为NULL
  • 用户名char [64]
  • gidint

我该如何解决这个问题,或者如何在不需要使用这个丑陋的 hack 的情况下解析数据库?

最佳答案

如果字符串变量 unamepasswd 都只是指针,没有指向任何地方,你认为当 fscanf 时会发生什么尝试使用这些指针并将字符串写入内存?

这将导致未定义的行为,在 strcmp 调用中完成的取消引用也是如此。

unamepasswd 变量也应该使用数组。

关于c - 用于读取数据库的损坏的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com