我有一段代码,在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 username
是char [64]
gid
是int
如何解决这个问题,或者如何解析数据库而不需要使用这个丑陋的黑客?
答案 0 :(得分:2)
如果字符串变量uname
和passwd
都只是指针,那就不指向任何地方,当fscanf
尝试使用这些指针并写入字符串时,您认为会发生什么?进入记忆?
这将导致未定义的行为,以及strcmp
调用中的解除引用。
您也应该为uname
和passwd
变量使用数组。