C語言中printf的語法

2021-05-17 14:43:24 字數 3193 閱讀 1763

c中格式字串的一般形式為: %[標誌][輸出最小寬度][.精度][長度]型別, 其中方括號中的項為可選項。各項的意義介紹如下:

1.型別型別字元用以表示輸出資料的型別,其格式符和意義下表所示:

表示輸出型別的格式字元

格式字元意義

%a                              浮點數、十六進製制數字和p-計數法(c99)

%a                              浮點數、十六進製制數字和p-計數法(c99)

%c                              輸出單個字元

%d                              以十進位制形式輸出帶符號整數(正數不輸出符號)

%e                              以指數形式輸出單、雙精度實數

%e                              以指數形式輸出單、雙精度實數

%f                               以小數形式輸出單、雙精度實數

%g                              以%f%e中較短的輸出寬度輸出單.雙精度實數,%e格式在指數小於-4或者大於等於精度時使用

%g             以%f%e中較短的輸出寬度輸出單.雙精度實數,%e格式在指數小於-4或者大於等於精度時使用

%i                               有符號十進位制整數(與%d相同)

%o            以八進位制形式輸出無符號整數(不輸出字首o)

%p                               指標

%s            輸出字串

%x            以十六進製制形式輸出無符號整數(不輸出字首ox)

%x            以十六進製制形式輸出無符號整數(不輸出字首ox)

%u            以十進位制形式輸出無符號整數

/*   測試常見的輸出型別   */

#include "stdio.h"

#include "conio.h"

main()

2.標誌

標誌字元為-、+、#、空格和0五種,其意義下表所示:

標誌格式字元      標 志 意 義

-           結果左對齊,右邊填空格

+           輸出符號(正號或負號)

空格                                 輸出值為正時冠以空格,為負時冠以負號

#          對c,s,d,u類無影響;對o類,在輸出時加字首0;對x類,

在輸出時加字首0x或者0x;對g,g 類防止尾隨0被刪除;

對於所有的浮點形式,#保證了即使不跟任何數字,也列印乙個小數點字元

0                                       對於所有的數字格式,用前導0填充字段寬度,若出現-標誌或者指定了精度(對於整數),忽略

3.輸出最小寬度

用十進位制整數來表示輸出的最少位數。若實際位數多於定義的寬度,則按實際位數輸出,若實際位數少於定義的寬度則補以空格或0。

/*   測試標誌字元為-、+、#、空格四種   */

#include "stdio.h"

#include "conio.h"

main()

4.精度

精度格式符以「.」開頭,後跟十進位制整數。本項的意義是:如果輸出數字,則表示小數的位數;如果輸出的是字元,則表示輸出字元的個數;若實際位數大於所定義的精度數,則截去超過的部分。

/*   測試精度   */

#include "stdio.h"

#include "conio.h"

main()

5.長度

長度格式符為h,l兩種,h表示按短整型量輸出,l表示按長整型量輸出。

h和整數轉換說明符一起使用,表示乙個short   int 或者unsigned short int

型別的數值 ,示例:

%hu,%hx,%6.4hd

hh和整數轉換說明符一起使用,表示乙個short   int 或者unsigned short型別的數值 ,示例:

%hhu,%hhx,%6.4hhd

j和整數轉換說明符一起使用,表示乙個intmax_t或者uintmax_t型別的數值 ,示例:

%jd,%8jx

l和整數轉換說明符一起使用,表示乙個long

int 或者unsigned long int型別的數值 ,示例:

%ld,%8lu

ll和整數轉換說明符一起使用,表示乙個longint 或者unsigned long int型別的數值 (c99),示例:

%lld,%8llu

l和浮點轉換說明符一起使用,表示乙個long double的值,示例:%lf,%10.4le

t和整數轉換說明符一起使用,表示乙個ptrdiff_t值(兩個指標之間的差相對應的型別)(c99),示例:

%td,%12ti

z和整數轉換說明符一起使用,表示乙個size_t值(sizeof返回的型別)(c99),示例:%zd,%12zx

main()

a<--15

b<--138.3576278

c<--35648256.3645687

d<--'p'

main()

使用printf函式時還要注意乙個問題,那就是輸出表列中的求值順序。不同的編譯系統不一定相同,可以從左到右,也可從右到左。turbo c是按從右到左進行的

main()

6.特殊用法

對於m.n的格式還可以用如下方法表示(例)

char ch[20];

printf("%*.*s/n",m,n,ch);

前邊的*定義的是總的寬度,後邊的定義的是輸出的個數。分別對應外面的引數m和n 。我想這種方法的好處是可以在語句之外對引數m和n賦值,從而控制輸出格式。

今天(06.6.9)又看到一種輸出格式 %n 可以將所輸出字串的長度值賦紿乙個變數, 見下例:

int slen;

printf("hello world%n", &slen);

執行後變數被賦值為11。

又查了一下, 看到一篇文章(檢視

)說這種格式輸出已經確認為乙個安全隱患,並且已禁用。再搜搜果然這種用法都被用來搞什麼溢位、漏洞之類的,隨便找了乙個:格式化字串攻擊筆記

特別注意下%*.*s這種用法

C語言中printf格式

轉換說明及作為結果的列印輸出 a 浮點數 十六進製制數字和p 記數法 c99 a 浮點數 十六進製制數字和p 記法 c99 c 乙個字元 d 有符號十進位制整數 e 浮點數 e 記數法 e 浮點數 e 記數法 f 浮點數 十進位制記數法 g 根據數值不同自動選擇 f或 e g 根據數值不同自動選擇 ...

C語言中的printf函式

c語言中的 g是printf 函式的乙個輸出格式化型別,它表示以 f e中較短的輸出寬度 輸出單雙精度實數,在指數小於 4或者大於等於精度時使用 e格式 02g 02表示不足兩位,前面補0輸出 超過兩位的不影響 root localhost seq printf 02x n 0x123 123 ro...

C語言中的printf函式

includevoid main printf的作用是輸出資訊 d對應的引數值是int型別 visitor count是按指定格式顯示變數的值 d 將引數按整形形式轉換輸出,對應的引數是int ld 將引數按長整型形式轉換輸出,對應的引數是long c 輸出乙個字元,對應的引數是乙個字元 s 輸出乙...