解释下面的输出?

时间:2011-07-01 05:40:52

标签: c

#include<stdio.h>
void main()
{
    char ch;
    if((ch=printf(1234))
        printf("A");
    else
        printf("B");
}

答案是B: 但我不知道ch赋予了什么值以及printf(1234)

会发生什么

5 个答案:

答案 0 :(得分:3)

来自printf(3)手册页:

Return value
   Upon successful return, these functions return the number of characters
   printed  (not  including  the  trailing  '\0'  used  to  end  output to
   strings).

答案 1 :(得分:3)

您可以学习使用调试器并查看已为ch分配的值。或者您可以在程序和程序中添加printf("%d\n", ch);并按照这种方式查看。

或者你可以阅读documentation,就像Ignacio Vazquez-Abrams所指出的那样。

答案 2 :(得分:2)

printf返回输出中写入的字符数。但是,您的代码中有几个错误。它应该是这样的:

#include<stdio.h>
int main()
{
    int ch;
    if(ch=printf("1234"))
        printf("A");
    else
        printf("B");

    return 0;
}

在这种情况下,ch将为4,输出应为1234A。

更新:根据收到的评论进行修改。

答案 3 :(得分:1)

我想指出你的代码可能无法在大多数现代编译器上编译,特别是因为第5行。

假设你的编译器允许你这样做,printf将返回0(这是你的ch),因为没有打印任何内容。因此,答案是B。

答案 4 :(得分:-1)

printf的签名是

int printf(const char* restrict fmt, ...)

你已经为第一个参数传递了一个整数。

printf(1234)的行为是 undefined 实现已定义。

5.整数可以转换为任何指针类型。除非事先指明,否则  结果是实现定义的,可能没有正确对齐,可能不指向   引用类型的实体,可能是陷阱表示。 (6.3.2.3指针)

当1234恰好指向包含格式说明符的有效字符串时,行为未定义。