C中是否有办法传递printf()
我们想要用作转换说明符的参数?一个小例子:
想象一下,我用./foo [-x]
如果-x
不存在,我希望它以十进制打印一些值。但是如果存在-x
,我希望它以十六进制打印该值。
有没有办法将printf()
我们想要用作转换说明符的字符串作为参数传递,在本例中为"x"
或"%s"
?
-
注意:它不像
char *format = "%s";
printf(format, "a string");
我正在寻找。
答案 0 :(得分:2)
虽然* printf()系列函数确实提供了将字段宽度作为参数传递的方法,但实际的转换说明符本身必须以格式字符串形式提供。因此,如果您的程序需要在printf("%#X", integer)
和printf("%d", integer)
之间进行选择,则必须以编程方式生成格式字符串(与您在问题末尾明确拒绝的方式非常类似)或者您需要对printf()
进行两次不同的调用,并使用条件代码在它们之间进行选择。另一方面,只要所有可能的不同输出格式使用相同数量的参数,以编程方式生成格式字符串对我来说似乎并不十分繁重。