将printf()作为参数传递给自己:printf(“%”,printf(“%s”,“something something”));

时间:2014-01-12 14:13:47

标签: c

这就像是一个谜题......我刚回到C再次想要掌握它。所以我一直在阅读 The C Programming Language ,我接受了这个声明:

  

其中,printf也认可...... %%。

我之前不知道的事情。所以我开始通过编写这一小段代码来使用这个功能:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {

    int number = 300;
    printf("%\n\n%12d\n\n\n\n\n", printf("%\n\n\n\n\n\n", printf("%s", "foooo!")), number);

    return (EXIT_SUCCESS);
}

这是输出: Output screenshot

我希望输出中 300 2 来自哪里 - 有人知道吗?

修改

我意识到这完全是一个错误,因为我误解了上面引用的文字。非常感谢帮助我实现这一点。

2 个答案:

答案 0 :(得分:11)

您没有将有效的参数组合传递给三个printf()个调用中的两个。这会产生undefined behaviour

  

其中,printf还为自己识别...... %%

这意味着格式说明符中的%%会导致%被写入输出。

它与将printf()的返回值(即写入的字符数)传递给另一个printf()调用无关。此外,您的代码甚至不包含%%

答案 1 :(得分:2)

A % followed by another % character will write a single % to the stream.

它看到%后跟一个\n,它不是有效的格式说明符。您的格式字符串也与您的参数不匹配。 printf的返回值是成功写入的字符数。因此它是一个数字。如果您的格式字符串与传递给printf的参数数量不匹配,则它是未定义的行为。

printf("%12d    %d ",          printf("%d",          printf("%s", "foooo!")), number);
        number  ret of printf--^       ret of printf-^