fputs 与 fwrite 在安全性方面

ppa*_*dey 0 c unsafe

我正在编写一个应用程序,它必须从文件中找到子字符串并将该子字符串写入某个不同的文件中。为了写入文件,我使用 fputs,但有人告诉我检查更安全的版本来写入文件。

while (fgets(line, MAX_LINE_LEN, fp1) != NULL) {

        if (pname_count < 1) {
            if (strstr(line, p_name)) {
                pname_count++;
                fputs(strstr(line, p_name), fp2);// danger.
                continue;
            }
        }
       //Remaining code

    }
Run Code Online (Sandbox Code Playgroud)

按照下面的两个链接,但没有得到我的确切答案。

gets() 和 fputs() 是危险函数吗?

C 中的 fputs 危险

有人可以解释一下安全方面“fputs”的漏洞是什么吗?

由于 fwrite 需要写入文件的字符数,这是否会使 fwrite 比 fputs 更安全?

Ste*_*mit 6

我不认为这fputs有任何本质上的危险。我相信其他问题被误认为是这样。

您问是否比明确计数fwrite更安全。fputs我认为我们不能这么说;我相信这有两面性:

  • fputs处理以 null 结尾的字符串,因此如果您不小心传递了一个未正确以 null 结尾的字符串,fputs则会偏离末尾,并且可能会发生奇怪的事情。程序员肯定会犯这个错误。

  • 但意外地将错误的计数传递给 也同样容易fwrite。特别是,如果您正在编写(您认为是)一个以 null 结尾的字符串,您可能会调用fwrite(str, 1, strlen(str), fp),这显然会遇到完全相同的问题。