平时真不怎么关注printf的返回值,一般是直接调用printf格式化输出,今天做腾讯的笔试题发现了一个知识漏洞,特此记录。
首先,题目是这样的:
int f(int a, int b, int c){ return 0;}int main(){ return f(printf("a"),printf("b"),printf("c"));}
问上述程序的输出结果,自以为printf调用成功返回0,而且参数传递顺序是栈式(先进后出,即调用顺序和参数顺序相反),所以输出结果为”cba”,没想到蒙对了答案,但是这么理解是错误的,错在对printf函数的返回值上。
首先看一下测试程序感受一下:
#include #include int main(){ int v1=1; int v2=11; double v3=6.6; char v4='a'; char *v5="wlk"; int r1=printf("%d",v1); int r2=printf("%d",v2); int r3=printf("%f",v3); int r4=printf("%c",v4); int r5=printf("%s",v5); printf("%d,%d,%d,%d,%d",r1,r2,r3,r4,r5); return 0;}
测试结果:
通过测试结果的规律,大胆的预测一下printf的返回值: 返回格式化数据替换后整个字符串的总字符个数。(为转义字符)