printf打印的值的数量是否取决于为特定程序分配的内存,还是可以继续打印值?
答案 0 :(得分:17)
C标准记录了编译器为函数调用接受的最小参数数量:
C11 5.2.4.1翻译限制
实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:
...
一个函数调用中的127个参数
...
因此,您应该能够在初始格式字符串之后将至少126个值传递给printf
,假设格式字符串已正确构造并与后面的实际参数一致。
如果格式字符串是字符串文字,则标准保证编译器可以处理至少4095字节长的字符串文字,并且源行至少4095字符长。您可以使用字符串连接在多个源行上拆分文字。如果对格式字符串使用char
数组,则不存在此限制。
printf
系列函数记录的唯一环境限制是:
任何单次转换可以产生的字符数至少为4095
这使得格式%10000d
的行为最好由实现定义,但标准不强制要求。
因此,兼容的编译器/库组合应该接受printf
的至少126个值,无论您的环境是否允许更多参数可以由实现定义并记录,但标准不保证。< / p>