平時真不怎麼關注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的傳回值: 傳回格式化資料替換後整個字元串的總字元個數。(為轉義字元)