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

Broken C code for reading database

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

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

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

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

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

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

您也应该为 unamepasswd 变量使用数组。