MISRA C++:2008 Rule 27-0-1
R2026bThe stream input/output library <cstdio> shall not be used
描述
The stream input/output library <cstdio> shall not be used. 1
理由
cstdio 中的函数(例如 gets()、fgetpos()、fopen()、ftell() 等)具有未指定行为、未定义行为和实现定义的行为。
例如:
gets()函数:不会检查标准输入提供的字符数是否超出了缓冲区char * gets ( char * buf );
buf的大小。当输入超出缓冲区大小时,该函数可能会出现意外行为。fopen函数具有特定于实现的行为,该行为涉及在出错时是否设置errno,或者是否接受标准模式设定符之后的附加字符。
Polyspace 实现
如果您使用了在 <cstdio> 中声明的函数,则 Polyspace® 会报告违反了此规则。Polyspace 会检测是否使用了以下 cstdio 函数:
remove()和rename()等文件操作函数。fclose()、fflush()和fopen()等文件访问函数。fprintf()、fscanf()、printf()和scanf()等格式化的输入/输出函数。fgetc()、fgets()、fputc()和getc()等字符输入输出函数。fread()和fwrite()等直接输入/输出函数。fgetpos()和fsetpos()等文件定位函数。clearerr()、ferror()和perror()等错误处理函数。
故障排除
如果您预期会出现违规,而 Polyspace 未报告该违规,请参阅诊断为何编码规范违规未按预期显示。
示例
检查信息
| 组: 输入/输出库 |
| 类别:必需 |
版本历史记录
在 R2013b 中推出
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C:2025
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.