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

时间:2015-12-10 13:45:01

标签: c segmentation-fault scanf strcmp

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

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

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

  • dbFILE *,已打开。
  • unamepasswdchar *,均已初始化为NULL
  • usernamechar [64]
  • gidint

如何解决这个问题,或者如何解析数据库而不需要使用这个丑陋的黑客?

1 个答案:

答案 0 :(得分:2)

如果字符串变量unamepasswd都只是指针,那就不指向任何地方,当fscanf尝试使用这些指针并写入字符串时,您认为会发生什么?进入记忆?

这将导致未定义的行为,以及strcmp调用中的解除引用。

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