C 如何使用printf()打印函数的返回值? 更新:
原始代码看起来很像这样:C 如何使用printf()打印函数的返回值? 更新:,c,printf,C,Printf,原始代码看起来很像这样: // printf(printf();); #include <string> int main() { printf(printf("Hello, WORLD!");); } 我们看到了结果: Hello, World! x has 14 characters. 当我预料到: x has 14 characters. //because this appears first. Hello, World! //because
// printf(printf(););
#include <string>
int main()
{
printf(printf("Hello, WORLD!"););
}
我们看到了结果:
Hello, World!
x has 14 characters.
当我预料到:
x has 14 characters. //because this appears first.
Hello, World! //because this appear second.
因为x
在x之后,有14个字符。
有人请解释一下为什么/a.out
会按倒序给我结果(在Ubuntu中使用gcc和shell);此外,eclipse显示了以相同的向后顺序给出结果
也许另一种重新表述问题的方式是:世界你好!\n“被叫去打印吗?
世界你好代码>首先显示,因为您先打印了它
首先(在第4行),按如下方式调用printf
:printf(“你好,世界!\n”)
。它打印你好,世界代码>和换行符。将调用返回的值(14
,打印的字符数)保存在x
中
然后(在第5行)调用printf
,如下所示:printf(“x有%d个字符。\n”,x)
。它打印的x有14个字符。
和一个换行符。返回的值将被丢弃
请注意,x
没有字符;它有一个号码。具体来说,它具有第一次调用printf
返回的数字,即它打印的字符数
下面给出了您想要的输出:
const char* msg = "Hello, World!";
size_t len = strlen(msg);
printf("msg has %zu characters.\n", len);
printf("%s\n", msg);
您试图使用printf
获取字符串的长度,但它也会在返回打印字符长度时打印出给定的字符串。这不是你想要的
您可以使用strlen
而不是printf
获取字符串的长度,而无需将其打印到输出
char *str = "Hello, World!\n";
int x = strlen(str);
printf("x has %d characters.\n", x);
printf(str);
return 0;
当您调用时,它将打印您作为参数传递的任何字符串。
所以,您在控制台上获得的打印结果与您在代码中放置它们的顺序相同
从OP编辑后更新:
我仍然不太明白你所说的//是什么意思,因为这是第二个出现的。
在那里评论
x has 14 characters. //because this appears first.
Hello, World! //because this appear second.
我对这个问题的理解是,您要做的是解释为什么首先打印Hello World
,然后打印x有14个字符。
正在打印
我不能用最简单的话来解释这一点,“因为,当代码被执行时,处理器第一次遇到对printf()
函数的调用,该函数带有一个字符串参数“Hello World\n”
。所以它会在控制台上转储它。
然后是第二个调用printf(“x有%d个字符。\n”,x);
,最终在控制台上转储该字符。”
显然,x
的值是14
,因为字符串中的字符数Hello World代码>为13+1(即14)
现在是混乱:
如果您认为您刚刚将x
定义为printf(“Hello World!\n”)
,那么这是一个错误的假设。
使用intx=printf(“你好,世界!\n”)代码>语句,实际上,您声明了一个int
变量x
,并用return
edprintf(“Hello World\n”)初始化(或赋值)它代码>,即14
考虑一下这个小程序:
#include <stdio.h>
int foo(int bar)
{
printf("Foo %d\n", bar);
return 42;
}
int main() {
int x = foo(12); // we call the foo function which prints "Foo 12"
// the return value of foo is assigned to x"
printf("Hello World.\n"); // we print "Hello World"
printf("x = %d\n", x); // we print "x = 42"
}
如果你理解这个小程序,你也应该理解你的程序的输出
在您的程序中:
#include <stdio.h>
int main(int argc, char ** argv)
{
int x = printf("Hello, World!\n"); // you call printf which prints ("Hello World!")
// and the return value of printf is assigned to x
printf("x has %d characters.\n", x); // then we print "x has 14 characters"
return 0;
}
因为您首先调用了x=printf(“你好,世界!\n”);
系统将在输出中执行printf,并指定x=14
因此,您有了第二个printf。为什么希望你好,世界调用printf(“Hello,World!\n”)时第二次打印的代码>代码>第一个???内容按打印顺序显示。printf(“a”、“b”、“c”)
不会返回abc
。我没能理解你的问题
将打印a
并返回1.Re“where is”Hello,World\n“
被调用打印?”,第4行(printf(“你好,世界!\n”)
)@ikegamiprintf(“你好,世界!\n”)
被分配给x。没有意义的是说它“被调用以打印”。这就像说在5*(6+7)
中没有添加,因为添加看起来像6+7
printf(…)
是对printf
的调用(就像6+7
执行添加一样),和printf
在调用时打印到stdout并返回打印的字节数(就像6+7执行加法并返回13)。您请求了我们的帮助,因此请停止对此提出异议。@Wolfpack'08调用x=printf(…
与printf完全相同(…
,但在后一种情况下,我们只是忽略printf
的返回值,而在第一种情况下,我们也将printf
的返回值指定给x。也许你应该阅读C教科书中关于函数的章节。@Wolfpack'08对这个问题的所有评论和回答都是有意义的。我从很久以前,我第一次学习C是通过阅读我的C教科书中有关函数的章节。不,“我只把它定义为x”是没有意义的。\include
definedprintf
,和intx
definedx
。我同意这一点,而且许多开发人员确实不会忍受我说的语气编译器不会执行您的代码,而是编译它",但这是显而易见的技术事实。我不担心问题是否被编辑,只要在我写答案时问题就在那里。此外,如果我建议编辑从原始帖子中删除与编译器相关的语句,因为它们在技术上是错误的,评论家会拒绝它,因为这将是一个错误尝试更改帖子的原始技术细节,无论是对是错。在你的情况下不是这样,但它们通常反映了提问者的总体理解。这是有意义的。x
是
Foo 12
Hello World.
x = 42
#include <stdio.h>
int main(int argc, char ** argv)
{
int x = printf("Hello, World!\n"); // you call printf which prints ("Hello World!")
// and the return value of printf is assigned to x
printf("x has %d characters.\n", x); // then we print "x has 14 characters"
return 0;
}
Hello, World!
x has 14 characters.