技术解析

一道 C 语言 printf 的经典题目
0
1975-02-25 02:49:47
idczone

下列程序,输出结果?

#include 
int main() {
    int i = 43;
    printf("%d\n",printf("%d",printf("%d",i)));
    return 0;
}

原系列出处:Linux 下 C 语言的几道经典面试题


4321

有啥经典的

来来来,自认 c/c++ 面霸们的试试这个 /t/370278#r_4451518

结果为什么会是 4321 啊?

我运行了,结果确实是 4321,但是不明白为什么会是 4321 ?

你查一查 printf 的返回值就明白了呀。

printf 返回打印的字符串长度吧

有啥经典的?测试答题者熟不熟悉 printf 函数?
low 的不行

man 一下 printf 不就知道了,这问题纯粹就是看你有没有认真读过 printf 的函数文档罢了

一个命令:gcc -S
换个字面的解释:AMD64 指令集,函数调用过程:第一、2 个参数,mov 到某个寄存器,rax 放系统调用号? 再 syscall。
printf 第一个参数就是那个"%d",第二个参数呢?:)

printf 比较经典面试题是 EMC 的某道校招题,和 fork 集合起来考察缓冲区的理解。比较不错。
至于楼主这道,小学生。

这题,考察的是执行顺序与返回值?

给大佬们跪了...

printf 返回值是 int,我看函数声明这样写

就从这种帖子就能看出来这里的都是些什么水平的货色
小学生真是高看它了
回你的贴都是对人的一种侮辱

看这里 https://linux.die.net/man/3/printf
或者在自己的电脑上这样子
```
cat /usr/include/stdio.h | grep printf
extern int fprintf (FILE *__restrict __stream,
extern int printf (const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
·······
```
看第三行, 有返回值的

man 手册里面对返回值的说明具体是这句话
Upon successful return, these functions return the number of characters printed (excluding the null byte used to end output to strings).

还不如这样考,printf("%d\n",printf("%d",scanf("%d%d",&a,&b)));

别鄙视楼主了,至少我这个小学生学到了

如果用了现实中不会出现的写法,那么这道题就提到不什么经典。

为什么有些人的回复总喜欢充满恶意

看不出哪里经典了,挺无聊的题目

int x=100;
printf("%d");
32bit msvc cl -O0 编译
输出?

printf 簇函数 ( printf/sprintf/fprintf ) 返回打印的字符串的长度
printf "43" 返回长度 2, "2" 返回长度 1 (延伸:"1" 还是返回 1 )
所以 console 里面看到的是 4321,可以分开看:先打印 43,然后打印 2,然后打印 1,如果在调一层,就还是 1 ( 43211 )。

第一次看错了, 以为是考参数计算顺序 (ub) 的

这是在刷 seo 么,我记得今天在 segment fault 看见过一模一样的东西。

回字有四种写法,你们都学到了吗?

我来出一道题吧,关于 printf 的。

int main(){
int n = 0;
printf("HELLO %d\n%n", n, &n);
printf("%d\n", n);
return 0;
}

不是很理解。

写了几年 C/C++从来没用过 printf 的返回值……

不错 我还真不知道 sizeof('a') 在 c 和 c++ 里面竟然不一样。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服