原始代码看起来很像这样:
// printf(printf(););
#include <string>
int main()
{
printf(printf("Hello, WORLD!"););
}
但是,在原始帖子中,printf("Hello, WORLD!")
被分配给变量x。
printf()
的第一个参数是printf()
的返回值,x == "Hello, World!"
中x = printf("Hello, World!")
是否为真?我正在查看http://www.cplusplus.com/reference/cstdio/printf/
它说:int printf ( const char * format, ... );
,但它没有定义...
。所以,我不知道...
引用了什么。我错误地认为这意味着( const char * format, const char * format, const char * format, ~
。但事实上,我无法根据猜测和阅读来破译其含义。
使用此程序:
#include <stdio.h>
int main(int argc, char ** argv)
{
str x = printf("Hello, World!\n");
printf("x has %d characters.\n", x);
//"x has %d characters.\n" appears first, x appears second.
return 0;
}
我们看到了结果:
Hello, World!
x has 14 characters.
当我预料到:
x has 14 characters. //because this appears first.
Hello, World! //because this appear second.
因为x
位于x has 14 characters.
之后。
有人请解释为什么./a.out
以向后的顺序给我结果(在Ubuntu中使用gcc和shell);此外,eclipse被显示为以相同的向后顺序给出结果。
或许另一种重新定义问题的方法是:在哪里调用"Hello, World!\n"
进行打印?
答案 0 :(得分:4)
Hello, World!
首先出现,因为您先打印它。
首先(第4行),您按以下方式致电printf
:printf("Hello, World!\n")
。它会打印Hello, World!
和换行符。您可以在14
中保存通话(x
,打印的字符数)返回的值。
然后(第5行),您拨打printf
,如下所示:printf("x has %d characters.\n", x)
。它会打印x has 14 characters.
和换行符。返回的值将被丢弃。
请注意x
没有字符;它有一个数字。具体来说,它具有第一次调用printf
时返回的数字,即它打印的字符数。
以下给出了您想要的输出:
const char* msg = "Hello, World!";
size_t len = strlen(msg);
printf("msg has %zu characters.\n", len);
printf("%s\n", msg);
答案 1 :(得分:3)
您正在尝试使用printf
获取字符串的长度,但它也会在返回打印字符长度时打印出给定的字符串。这不是你想要的。
您可以使用strlen
代替printf
来获取字符串的长度而不将其打印到输出中。
char *str = "Hello, World!\n";
int x = strlen(str);
printf("x has %d characters.\n", x);
printf(str);
return 0;
答案 2 :(得分:0)
当您致电printf
时,它会打印您传递的任何字符串作为参数。
因此,您将按照将它们放入代码中的顺序在控制台上获取打印件。
从OP编辑后更新:
我仍然不太清楚//because this appear second.
在那里评论你的意思。
x has 14 characters. //because this appears first.
Hello, World! //because this appear second.
我对此问题的看法是,您要做的是先解释为什么先打Hello World
然后打印x has 14 characters.
。
我无法用最简单的单词告诉它,&#34;因为,当代码执行时,处理器首先使用字符串参数{{1}调用printf()
函数}。所以它将它转储到控制台上。
然后是"Hello World\n"
的第二次调用,最后将其转发到控制台上。&#34;
显然,printf("x has %d characters.\n", x);
的值为x
,因为字符串14
中的字符数为13 + 1(即14)
现在混乱:
如果您认为自己刚刚将Hello World!
定义为x
,那么这是一个错误的假设。
使用printf("Hello World!\n")
语句,您实际上声明了int x = printf("Hello, World!\n");
变量int
,并使用x
编辑的值return
对其进行初始化(或分配),printf("Hello World\n");
{1}}。
答案 3 :(得分:0)
考虑这个小程序:
"Price"
输出结果为:
#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"
}
如果您了解这个小程序,您还应该了解 程序的输出。
在你的计划中:
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;
}
答案 4 :(得分:-1)
因为你先调用了x = printf(“Hello,World!\ n”); 系统将在输出中执行printf并指定x = 14
因此你有第二个printf。