我有一段代码,用 C 语言从 passwd 风格的数据库中读取条目:
do {
if (fscanf(db, "%s:%s:%d", uname, passwd, &gid) == EOF) {
return NULL;
}
} while (strcmp(uname, username));
但是,当运行它时,它给出了段错误。在调试器中运行后,我发现 strcmp
部分是引发段错误的部分。数据类型:
db
是FILE *
,已经打开。uname
和passwd
都是char *
,都初始化为NULL用户名
是char [64]
gid
是int
我该如何解决这个问题,或者如何在不需要使用这个丑陋的 hack 的情况下解析数据库?
最佳答案
如果字符串变量 uname
和 passwd
都只是指针,没有指向任何地方,你认为当 fscanf
时会发生什么尝试使用这些指针并将字符串写入内存?
这将导致未定义的行为,在 strcmp
调用中完成的取消引用也是如此。
uname
和 passwd
变量也应该使用数组。
关于c - 用于读取数据库的损坏的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34203494/