printf()
直接上代碼:
/*printf1.c --演示printf()的一些特性*/
#include<stdio.h>
int main(void){
int ten = 10;
int two = 2;
printf("Doing it right:\n");
printf("%d minus %d is %d \n",ten,2,ten-two );
printf("Doing it wrong:\n");
//注意污淋,這里故意遺漏了兩個參數(shù)
printf("%d minus %d is %d \n", ten);
return 0;
}
編譯時會有警告:
clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
/Users/ing/Documents/c:c++/cprimer/printf1.c:12:20: warning: more '%' conversions than data arguments [-Wformat]
printf("%d minus %d is %d \n", ten);
~^
1 warning generated.
大致翻譯下意思是說前邊的%d多于后邊你參數(shù)個數(shù),兩者數(shù)量對應(yīng)不上磺樱。
然后,我們繼續(xù)運行結(jié)果如下:
Doing it right:
10 minus 2 is 8
Doing it wrong:
10 minus 0 is 1573978167
這里我們看下最后一行打印的值 ,有沒有發(fā)現(xiàn) 打印出來的0 和 1573978167
這兩個值其實就是因為我們沒有給后兩個%d對應(yīng)參數(shù)煎殷,直接打印了內(nèi)存中的任意值。
結(jié)論:
在printf()函數(shù)中腿箩,要確保轉(zhuǎn)換說明符(%d) 和你后邊給出的待打印值的數(shù)量相等豪直。
sprintf()
sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,而printf是將一個格式化的字符串輸出到屏幕珠移。sprintf的第一個參數(shù)應(yīng)該是目的字符串弓乙,如果不指定這個參數(shù),執(zhí)行過程中出現(xiàn) "該程序產(chǎn)生非法操作,即將被關(guān)閉...."的提示钧惧。
sprintf()會根據(jù)參數(shù)format 字符串來轉(zhuǎn)換并格式化數(shù)據(jù)暇韧,然后將結(jié)果復(fù)制到參數(shù)str 所指的字符串?dāng)?shù)組,直到出現(xiàn)字符串結(jié)束('\0')為止浓瞪。關(guān)于參數(shù)format 字符串的格式請參考printf()懈玻。