用于读取数据库的损坏的 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
部分是引发段错误的部分。数据类型:
db
是 FILE *
,已经打开了。
uname
和passwd
都是char *
,都初始化为NULL
username
是 char [64]
gid
是 int
我该如何解决这个问题,或者如何在不需要使用这个丑陋的 hack 的情况下解析数据库?
如果字符串变量 uname
和 passwd
都只是指针,没有指向任何地方,你认为当 fscanf
尝试使用这些指针并写入时会发生什么字符串存入内存?
这将导致 未定义的行为,在 strcmp
调用中完成的取消引用也是如此。
您也应该为 uname
和 passwd
变量使用数组。
我有一段代码,用 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 *
,都初始化为NULLusername
是char [64]
gid
是int
我该如何解决这个问题,或者如何在不需要使用这个丑陋的 hack 的情况下解析数据库?
如果字符串变量 uname
和 passwd
都只是指针,没有指向任何地方,你认为当 fscanf
尝试使用这些指针并写入时会发生什么字符串存入内存?
这将导致 未定义的行为,在 strcmp
调用中完成的取消引用也是如此。
您也应该为 uname
和 passwd
变量使用数组。