读完后this我开始以为我已经学会了一个关于printf()
的赃物。突然,我发现下面的代码片段从this书:printf中的三元运算符
int main()
{
char str[]="Hello";
int i=5,j=10;
printf(i>j?"%50s":"%s",str); //unable to understand this
return 0;
}
令人惊讶上面的代码无故障运行,并将其打印Hello。 按以下我的知识是printf()
语法:
int printf(const char *format,argument_list);
所以根据这个语法,printf()
应与格式字符串开始。但是,正如你在上面的代码printf()
中看到的,以i>j
开头。 这是否意味着我在解释printf()的语法时出错? 在printf()中放置三元运算符是一种特殊情况吗?
编辑
我知道三元操作,我问的printf()
第一个参数应该是为const char *,我似乎没有在我的例子。
第1个参数内部表达式的结果必须是一个指向常量char数组的指针,所以没有什么让人惊讶的。 –
你的意思是什么,即使没有双引号是指向常量字符串 –
也许事情变得更清晰,如果你这样写:'printf((i> j?“%50s”:“%s”),str)' –