☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

C 格式化字符串需要的参数个数与实际传入的参数个数应一致

10.6.6 ID_inconsistentFormatArgNum
目录 › next › previous

如果参数的数量小于 C 格式化占位符的数量,会导致标准未定义的行为,反之多余的参数会失去意义,往往意味着逻辑错误。

示例:

void log(int type, const char* msg) {
    printf("[%d]: %s\n", type);        // Non-compliant, undefined behavior
}

例中格式化字符串需要两个参数,但只传入了一个,可能会打印出错误的信息,也可能会使程序异常终止。

由于可变参数列表自身的局限,很难在编译时发现这种问题,有些编译器会检查 printf、sprintf 等标准函数,但无法检查自定义函数,建议在 C++ 代码中禁用可变参数列表和 C 风格的格式化函数。

相关

ID_inconsistentFormatArgType ID_forbidCStringFormat

依据

ISO/IEC 9899:1999 7.19.6.1(2)-undefined ISO/IEC 9899:2011 7.21.6.1(2)-undefined

参考

SEI CERT FIO47-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.