語法:C語言中printf函式的返回值
阿新 • • 發佈:2019-02-19
平時真不怎麼關注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 <stdio.h>
#include <stdlib.h>
int main()
{
int v1=1;
int v2=11;
double v3=6.6;
char v4='a';
char *v5="wlk";
int r1=printf("%d\n",v1);
int r2=printf("%d\n",v2);
int r3=printf("%f\n",v3);
int r4=printf("%c\n",v4);
int r5=printf("%s\n",v5);
printf ("%d,%d,%d,%d,%d\n",r1,r2,r3,r4,r5);
return 0;
}
測試結果:
通過測試結果的規律,大膽的預測一下printf的返回值:
返回格式化資料替換後整個字串的總字元個數。(\n為轉義字元)
這麼理解合適麼,屢試不爽~~~