c - 如何计算 C 中格式字符串的参数数量?

标签 c

我有一个程序,它从命令行获取格式字符串,表示多个输出文件的文件名格式。它应该只需要一个可以替换的整数参数来生成真正的输出文件名,我想在进行输入检查时验证这一点。在 C 中确定格式字符串期望的参数数量的好方法是什么?

最佳答案

接受的参数数量取决于您的 C 库的版本(例如,%a 转换说明符是在 C99 中添加的)。您可以确定它不大于未转义的 % 字符数(即,在所有 %% 之后剩余的 % 字符数序列被删除)加上 * 字符的数量(可以是宽度说明符)。

不过,您应该考虑安全问题;如果用户提供 %n 格式说明符,这可能会导致写入任意内存位置。在其他情况下,供应例如%f 会导致输出垃圾值,%s 在任意内存内容中,甚至使用 %d 说明符允许用户提供字段宽度,例如%255d 可能导致缓冲区溢出。考虑不同的格式化方案会更聪明,例如替换一个标记(可能仍然是 %d),但不允许用户提供 printf 格式字符串。

关于c - 如何计算 C 中格式字符串的参数数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13629986/

相关文章:

计数排序未按预期工作

在 C 中动态更改变量中的多个管道值可能吗?

c - 链表实现中的虚拟节点

c - 为什么 ia 数组大于为其分配的内存?

iphone - Cocos2d 调度间隔减少器

C:变量 's' 周围的堆栈错误已损坏

c - ';' 标记前的语法错误

c - 使用 fscanf 读取 boolean 值

c++ - 具有两个假值的二进制 AND 结果为真

c - Unix: write() when offset is greater than size