将转换说明符作为参数传递给printf()

时间:2013-07-04 15:13:18

标签: c formatting printf

C中是否有办法传递printf()我们想要用作转换说明符的参数?一个小例子:

想象一下,我用./foo [-x]

调用我的程序

如果-x不存在,我希望它以十进制打印一些值。但是如果存在-x,我希望它以十六进制打印该值。

有没有办法将printf()我们想要用作转换说明符的字符串作为参数传递,在本例中为"x""%s"

-

注意:它不像

char *format = "%s";
printf(format, "a string");

我正在寻找。

1 个答案:

答案 0 :(得分:2)

虽然* printf()系列函数确实提供了将字段宽度作为参数传递的方法,但实际的转换说明符本身必须以格式字符串形式提供。因此,如果您的程序需要在printf("%#X", integer)printf("%d", integer)之间进行选择,则必须以编程方式生成格式字符串(与您在问题末尾明确拒绝的方式非常类似)或者您需要对printf()进行两次不同的调用,并使用条件代码在它们之间进行选择。另一方面,只要所有可能的不同输出格式使用相同数量的参数,以编程方式生成格式字符串对我来说似乎并不十分繁重。