更新:
原始代码看起来很像这样:
// printf(printf(););
#include <string>
int main()
{
printf(printf("Hello, WORLD!"););
}
但是,在原始帖子中,printf("Hello, WORLD!")
被分配给变量 x。
预期问题:
- 如何在函数内调用函数的返回值?作为初学者,在学习使用 %s 引用字符串变量时,我想知道如何引用函数的返回值(例如,如果返回值是字符串,我是否仍然使用 %s)。
- “要求打印”是什么意思?我认为一个简单的解释是:字符串被放入内存并分配一个地址,类定义告诉编译器根据类的输入参数定义在内存中查找位置;这样,编译器就会调用打印内存中的地址。
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 之后,有 14 个字符。
。
有人请解释一下为什么 ./a.out
给我的结果是倒序的(在 Ubuntu 中使用 gcc 和 shell);此外,Eclipse 显示以同样的倒序给出结果。
也许换句话说这个问题的另一种方式是:“Hello,World!\n”
在哪里被调用打印?
最佳答案
Hello, World!
首先出现,因为您先打印了它。
首先(第 4 行),按如下方式调用 printf
:printf("Hello, World!\n")
。它打印 Hello, World!
和换行符。您将调用返回的值(14
,打印的字符数)保存在 x
中。
然后(在第 5 行),您按如下方式调用 printf
:printf("x has %d 个字符。\n", x)
。它打印 x has 14 个字符。
和换行符。返回值被丢弃。
请注意,x
没有字符;它有一个号码。具体来说,它具有第一次调用 printf
返回的数字,即它打印的字符数。
以下给出了您想要的输出:
const char* msg = "Hello, World!";
size_t len = strlen(msg);
printf("msg has %zu characters.\n", len);
printf("%s\n", msg);
关于c - 如何使用 printf() 打印函数的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47299715/