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

时间:2017-11-15 05:05:38

标签: c printf

更新

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

// printf(printf(););

#include <string>

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

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

预期问题:

  1. 如何在函数内调用函数的返回值?作为初学者,学习使用%s引用字符串变量,我想知道如何引用函数的返回值(例如,如果返回值是一个字符串,我仍然会使用%s)。
  2. &#34;什么叫打印&#34;意思?我认为一个简单的解释是:将字符串放入内存并分配一个地址,类定义告诉编译器根据类的输入参数定义查找内存中的位置;因此,编译器会调用内存中的地址进行打印。
  3. printf()的第一个参数是printf()的返回值,x == "Hello, World!"x = printf("Hello, World!")是否为真?
  4. 原帖:

    我正在查看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"进行打印?

5 个答案:

答案 0 :(得分:4)

Hello, World!首先出现,因为您先打印它。

首先(第4行),您按以下方式致电printfprintf("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。