1. 程式人生 > >語法:C語言中printf函式的返回值

語法:C語言中printf函式的返回值

平時真不怎麼關注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為轉義字元)

這麼理解合適麼,屢試不爽~~~