sprintf 格式化輸出函式

2021-07-24 02:10:16 字數 2750 閱讀 9216

sprintf() 格式化輸出函式(圖形)

功能: 函式sprintf()用來作格式化的輸出。

用法: 此函式呼叫方式為int sprintf(char *string,char *format,arg_list);

說明: 函式sprintf()的用法和printf()函式一樣,只是sprintf()函式給出第乙個引數string(一般為字元陣列),然後再呼叫outtextxy()函式將串裡的字元顯示在螢幕上。arg_list為參數列,可有不定個數。通常在繪圖方式下輸出數字時可呼叫sprintf()函式將所要輸出的格式送到第乙個引數,然後顯示輸出。

函式名: sprintf

功  能: 送格式化輸出到字串中

用  法: int sprintf(char *string, char *farmat [,argument,...]);

程式例:

#include

#include

int main(void)

{char buffer[80];

printf 可能是許多程式設計師在開始學習c 語言時接觸到的第二個函式(我猜第乙個是main),說

起來,自然是老朋友了,可是,你對這個老朋友了解多嗎?你對它的那個孿生兄弟sprintf 了解多

嗎?在將各種型別的資料構造成字串時,sprintf 的強大功能很少會讓你失望。

由於sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,

後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。所以本文著重介紹sprintf,有時

也穿插著用用pritnf。

sprintf 是個變參函式,定義如下:

int sprintf( char *buffer, const char *format [, argument] ... );

除了前兩個引數型別固定外,後面可以接任意多個引數。而它的精華,顯然就在第二個引數:

格式化字串上。

printf 和sprintf 都使用格式化字串來指定串的格式,在格式串內部使用一些以「%」開頭的

格式說明符(format specifications)來佔據乙個位置,在後邊的變參列表中提供相應的變數,最終

函式就會用相應位置的變數來替代那個說明符,產生乙個呼叫者想要的字串。

格式化數字字串

sprintf 最常見的應用之一莫過於把整數列印到字串中,所以,spritnf 在大多數場合可以替代

itoa。如:

//把整數123列印成乙個字串儲存在s 中。

sprintf(s, "%d", 123); //產生"123"

可以指定寬度,不足的左邊補空格:

sprintf(s, "%8d%8d", 123, 4567); //產生:" 123 4567"

當然也可以左對齊:

sprintf(s, "%-8d%8d", 123, 4567); //產生:"123 4567"

也可以按照16 進製列印:

sprintf(s, "%8x", 4567); //小寫16 進製,寬度佔8 個位置,右對齊

sprintf(s, "%-8x", 4568); //大寫16 進製,寬度佔8 個位置,左對齊

這樣,乙個整數的16 進製字串就很容易得到,但我們在列印16 進製內容時,通常想要一

種左邊補0 的等寬格式,那該怎麼做呢?很簡單,在表示寬度的數字前面加個0 就可以了。

sprintf(s, "%08x", 4567); //產生:"000011d7"

上面以」%d」進行的10 進製列印同樣也可以使用這種左邊補0 的方式。

這裡要注意乙個符號擴充套件的問題:比如,假如我們想列印短整數(short)-1 的記憶體16 進製表

示形式,在win32 平台上,乙個short 型佔2 個位元組,所以我們自然希望用4 個16 進製數字來打

印它:short si = -1;

sprintf(s, "%04x", si);

產生「ffffffff」,怎麼回事?因為spritnf 是個變參函式,除了前面兩個引數之外,後面的

引數都不是型別安全的,函式更沒有辦法僅僅通過乙個「%x」就能得知當初函式呼叫前引數壓棧

時被壓進來的到底是個4 位元組的整數還是個2 位元組的短整數,所以採取了統一4 位元組的處理方式,

導致引數壓棧時做了符號擴充套件,擴充套件成了32 位的整數-1,列印時4 個位置不夠了,就把32 位整數

-1 的8 位16 進製都列印出來了。如果你想看si 的本來面目,那麼就應該讓編譯器做0 擴充套件而不是

符號擴充套件(擴充套件時二進位制左邊補0 而不是補符號位):

sprintf(s, "%04x", (unsigned short)si);

就可以了。或者:

unsigned short si = -1;

sprintf(s, "%04x", si);

sprintf 和printf 還可以按8 進製列印整數字串,使用」%o」。注意8 進製和16 進製都不會打

印出負數,都是無符號的,實際上也就是變數的內部編碼的直接的16 進製或8 進製表示。

控制浮點數列印格式

浮點數的列印和格式控制是sprintf 的又一大常用功能,浮點數使用格式符」%f」控制,預設保

留小數點後6 位數字,比如:

sprintf(s, "%f", 3.1415926); //產生"3.141593"

但有時我們希望自己控制列印的寬度和小數字數,這時就應該使用:」%m.nf」格式,其中m 表

示列印的寬度,n 表示小數點後的位數。比如:

sprintf 格式化輸出函式

功能 函式sprintf 用來作格式化的輸出。用法 此函式呼叫方式為int sprintf char string,char format,arg list 說明 函式sprintf 的用法和printf 函式一樣,只是sprintf 函式給出第乙個引數string 一般為字元陣列 然後再呼叫out...

sprintf格式化輸出

函式原型 int sprintf char buffer,const char format argument 返回值 字串長度 strlen 引數說明及應用舉例 sprintf格式的規格如下所示。中的部分是可選的。指定引數 識別符號 寬度 精度 指示符 若想輸出 本身時,請這樣 處理。1.處理字元...

格式化輸出字串 sprintf

sprintf 跟printf 用法很相似,列印目的地不同。前者 sprintf 是列印到字串中,後者 printf 直接在命令列上輸出。sprintf 是個變參函式,作用是格式化字串。int sprintf char buffer,const char format argument format...