printf相关查询

时间:2011-11-21 15:17:08

标签: c printf

以下是使用printf的简单单行程序:

void main()

{
printf("%d%d",printf("Cis"),printf("good"));
}

输出:

goodCis34

如何解释这个输出?

5 个答案:

答案 0 :(得分:6)

首先打印goodCis的原因是因为需要在调用顶级printf()之前评估参数。

然后打印出返回值。

请注意,C未指定参数的评估顺序。语句中没有序列点。因此订单未定义。结果可以按任何顺序出现。 (因此,为什么他们似乎在这种情况下无序评估)

答案 1 :(得分:3)

Printf返回打印的字符数。 “顺”是3个字符,“好”是4。

它还将输出写入流。

因此打印“Cis”,返回3,打印出“good”,然后返回4.执行这些的顺序无法保证,因此未定义是否会获得“Cisgood”或“ goodCis”。

然后评估外部printf字符串,并返回输出“34”。

答案 2 :(得分:1)

printf("%d%d",printf("Cis"),printf("good"));

首先,评估参数。 首先评估printf(“good”)。打印出“good”并返回4(写入的字符数)。然后,评估printf(“Cis”)。打印“Cis”,返回3。评估后,功能变为如下: printf(“%d%d”,3,4);

所以,打印出34页。

答案 3 :(得分:0)

它正在评估从右到左,这意味着首先打印 good 。然后它评估第二部分 Cis

最后,在进行最左边的操作时,它使用这两个字符串的相应长度来填充%d个替换。

答案 4 :(得分:0)

printf及其系列会返回打印的字符数。在你的情况下,它只是字符串的长度。但是,未指定评估参数的顺序。在您的情况下,外部printf的第二个参数首先发生。它可能完全不同。