gpt4 book ai didi

c - fopen 有什么不安全的地方?

转载 作者:太空狗 更新时间:2023-10-29 16:00:43 26 4
gpt4 key购买 nike

当使用 fopen() 时,Microsoft Visual Studio 打印

warning C4996: 'fopen' was declared deprecated`

给出原因:

This function or variable may be unsafe. Consider using fopen_s instead.

fopen() 有什么不安全而 fopen_s() 更安全?

如何以安全的方式(如果可能)使用fopen()

我不想知道如何抑制警告 - 有足够多的 Stack Overflow 文章可以回答 that question .

最佳答案

Microsoft CRT 实现了 C11 附件 K 中描述的安全库增强功能。这是规范性的,但不是强制性的。 fopen_s() 在 K.3.5.2.1 节中有描述。也包含在 rule FIO06-C 中CERT 研究所。

问题在于 fopen() 可以追溯到更简单的时代,那时程序员仍然可以假设他们的程序是唯一一个操作文件的程序。一个从未真正实现过的假设。它没有办法描述如何限制其他进程对文件的访问,CRT 实现传统上打开文件而不拒绝任何访问。已使用非标准替代方案来解决此问题,例如 _fsopen()

如果打开文件进行写入,这会产生后果,另一个进程也可以打开文件进行写入,文件内容将无可救药地损坏。如果在另一个进程正在写入文件时打开文件进行读取,则文件内容的 View 是不可预测的。

fopen_s() 通过在文件打开进行写入时拒绝所有访问并在文件打开进行读取时仅允许读取访问来解决这些问题。

关于c - fopen 有什么不安全的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46266053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com