c - 如何使用 printf() 打印函数的返回值?

标签 c printf

更新:

原始代码看起来很像这样:

// printf(printf(););

#include <string>

int main()
{
   printf(printf("Hello, WORLD!"););
}

但是,在原始帖子中,printf("Hello, WORLD!") 被分配给变量 x。

预期问题:

  1. 如何在函数内调用函数的返回值?作为初学者,在学习使用 %s 引用字符串变量时,我想知道如何引用函数的返回值(例如,如果返回值是字符串,我是否仍然使用 %s)。
  2. “要求打印”是什么意思?我认为一个简单的解释是:字符串被放入内存并分配一个地址,类定义告诉编译器根据类的输入参数定义在内存中查找位置;这样,编译器就会调用打印内存中的地址。
  3. 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/

相关文章:

C语言 : How to access individual format specifiers in a printf format string?

c - sprintf 组合字符数组

c - 从内存加载检查证书

c++ - 为什么 printf ("%f",0);给出未定义的行为?

c - 在 C 中创建新文件时出现段错误

c - 在 C 程序中处理 Sqlite3 CORRUPT 错误 (11) 的更好方法是什么?

c - 'printf' 从整数生成指针而不进行强制转换

c - C语言中如何将一个整数值添加到一个字符串中

c - 如何在套接字上使用 lex 扫描器?

c - 在 C 中取消引用字符串指针