sprintf()跟printf()用法很相似,列印目的地不同。前者(sprintf)是列印到字串中,後者(printf)直接在命令列上輸出。 sprintf() 是個變參函式,作用是格式化字串。
int sprintf( char* buffer, const char* format [, argument], … ); //format格式和printf()的格式控制符一樣
buffer:char型指標,指向將要寫入的字串的緩衝區。
format:格式化字串。
[argument]…:可選引數,可以是任何型別的資料。
字串長度(strlen),列印到buffer中的字元數目
1. 將數字變數轉換為字串
2. 得到整型變數的16進製制和8進製字串
3. 連線多個字串
char str[10] = ;
//把整數123列印成乙個字串儲存在str中
sprintf(str, "%d", 123); //輸出:"123"
//可以指定寬度,不足的左邊補空格:
sprintf(str, "%8d%8d", 123, 4567); //輸出:"_1234567"
//當然也可以左對齊:
sprintf(str, "%-8d%8d", 123, 4567); //輸出:"123_4567"
//也可以按照16進製制列印:
sprintf(str, "%8x", 4567); //小寫16進製制,寬度佔8個位置,右對齊。輸出:____11d7
sprintf(str, "%-8x", 4567); //大寫16進製制,寬度佔8個位置,左對齊。輸出:11d7____
//左邊補0 的等寬格式(十進位制%d也可以)
sprintf(s, "%08x", 4567); //輸出:"000011d7"
浮點數使用格式符」%f」控制,預設保留小數點後6 位數字,比如:
sprintf(s, "%f", 3.1415926); //輸出:"3.141593"
需要控制列印的寬度和小數字數時,使用:」%m.nf「格式。(m表示列印的寬度,n表示小數點後的位數。)
sprintf(s, "%10.3f", 3.1415626); //輸出:" 3.142"
sprintf(s, "%-10.3f", 3.1415626); //輸出:"3.142 "
sprintf(s, "%.3f", 3.1415626); //不指定總寬度,輸出:"3.142"
int i = 100; sprintf(s, "%.2f", i); //輸出:"0.00"
sprintf(s, "%.2f", (double)i); //輸出:"100.00 "
spritnf 是個變參函式,除了前面兩個引數之外,後面的引數都不是型別安全的。
函式更沒有辦法僅僅通過乙個「%f」,就能得知當初函式呼叫前引數壓棧時,被壓進來的到底是個整數還是個浮點數。
儲存整數的4位元組的i,被強制當做8位元組的浮點數解釋了。
char s[20] = ;
char a1 = ;
char a2 = ;
// sprintf(s, "%s%s", a1, a2); //don『t do that!亂碼
// sprintf(s, "%7s%7s", a1, a2); //亂碼
sprintf(s, "%.7s%.7s", a1, a2); //輸出:"abcdefghijklmn"
sprintf(s, "%.6s%.5s", a1, a2); //輸出:"abcdefhijkl"
%m.ns ≈ %m.nf:
m 表示占用寬度(字串長度不足時補空格,超出了則按照實際寬度列印);
n 表示從相應的字串中最多取用的字元數, 用的多。
盡量使用」%.ns」的形式指定最大字元數。
動態指定取用字元長度:sprintf 採用「*」來佔位[指定寬度或精度的常數數字的位置]。
於是,上面的例子可以變成:
sprintf(s, "%.*s%.*s", 7, a1, 7, a2);
或者:
sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2);
實際上,前面介紹的列印字元、整數、浮點數等都可以動態指定那些常量值,比如:
sprintf(s, "%-*d", 4, 『a『); //輸出:"65 "
sprintf(s, "%#0*x", 8, 128); //輸出:"0x000080","#"產生0x
sprintf(s, "%*.*f", 10, 2, 3.1415926); //輸出:" 3.14"
除錯程式時,想檢視某些變數或者成員的位址。由於位址或者指標也不過是個32 位的數,可以用列印無符號整數的」%u」列印:
sprintf(s, "%u", &i);
≈sprintf(s, "%0*x", 2 * sizeof(void *), &i);
sprintf 格式化字串
sprintf 函式把格式化的字串寫入變數中。arg1 arg2 引數將被插入到主字串中的百分號 符號處。該函式是逐步執行的。在第乙個 符號處,插入 arg1,在第二個 符號處,插入 arg2,依此類推。注釋 如果 符號多於 arg 引數,則您必須使用佔位符。佔位符位於 符號之後,由數字和 組成。請...
使用cout格式化輸出字串
include stdafx.h include coutformatsample.h using namespace std public ccoutformatsample ccoutformatsample void ccoutformatsample ccoutformatsample vo...
Linux下格式化輸出字串
格式 printf 033 字背景顏色 字型顏色m字串 033 0m printf 033 41 32m字型背景是紅色,字是綠色 033 0m n 41是字背景顏色,32是字型的顏色,字型背景是紅色,字是綠色是字串.後面的 033 0m是控制碼.顏色 quote 字背景顏色範圍 40 49 字顏色 ...