C語言中sprintf 函式的用法

2021-08-09 04:20:01 字數 3487 閱讀 9119

1、該函式包含在stdio.h的標頭檔案中。

2、sprintf和平時我們常用的printf函式的功能很相似。sprintf函式列印到字串中(要注意字串的長度要足夠容納列印的內容,否則會出現記憶體溢位),而printf函式列印輸出到螢幕上。sprintf函式在我們完成其他資料型別轉換成字串型別的操作中應用廣泛。

3、sprintf函式的格式:

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

除了前兩個引數固定外,可選引數可以是任意個。buffer是字元陣列名;format是格式化字串(像:」%3d%6.2f%#x%o」,%與#合用時,自動在十六進製制數前面加上0x)。只要在printf中可以使用的格式化字串,在sprintf都可以使用。其中的格式化字串是此函式的精華。

printf 和sprintf都使用格式化字串來指定串的格式,在格式串內部使用一些以」%」開頭的格式說明符來佔據乙個位置,在後邊的變參列表中提供相應的變數,最終函式就會用相應位置的變數來替代那個說明符,產生乙個呼叫者想要的字串。

4、可以控制精度

char str[20];

double f=14.309948;

sprintf(str,」%6.2f」,f);

5、可以將多個數值資料連線起來

char str[20];

int a=20984,b=48090;

sprintf(str,」%3d%6d」,a,b);

str=」20984 48090」

6、可以將多個字串連線成字串

char str[20];

char s1[5]=;

char s2[5]=;

sprintf(str,」%.3s%.3s」,s1,s2);

%m.n在字串的輸出中,m表示寬度,字串共佔的列數;n表示實際的字元數。%m.n在浮點數中,m也表示寬度;n表示小數的位數。

7、可以動態指定,需要擷取的字元數

char str[20];

char s1[5]=;

char s2[5]=;

sprintf(str,」%.*s%.*s」,2,s1,3,s2);

sprintf(str, 「%*.*f」, 10, 2, 3.1415926);

8、可以列印出i的位址

char str[20];

int i;

sprintf(str, 「%p」, &i);

上面的語句相當於

sprintf(str, 「%0*x」, 2 * sizeof(void *), &i);

9、sprintf的返回值是字元陣列中字元的個數,即字串的長度,不用在呼叫strlen(str)求字串的長度。

10、使用字元指標指向的字串來接收列印的內容

例子:

int main()

sprintf(buffer, "the value of ddd = %d", ddd);//the value of ddd = 666

printf("%s\n",buffer);

free(buffer);

buffer=null;

return

0;}

指標剛開始定義的時候,並不指向所處,可以指向乙個變數,然後可以用,如果要單純用這個指標,那麼要給這個指標malloc分配一片記憶體,加了malloc就要加stdlib.h

11、設想當你從資料庫中取出一條記錄,然後希望把他們的各個字段按照某種規則連線成乙個字串時,就可以使用這種方法,從理論上講,他應該比strcat 效率高,因為strcat 每次呼叫都需要先找到最後的那個字串結束字元』\0的位置,而在上面給出的例子中,我們每次都利用sprintf 返回值把這個位置直接記下來了。

例子:

void main(void)

該例子是將所有定義的資料和格式控制塊中的字元連線在一起,最後列印出來buffer的內容和字串中字元的個數。

結果如圖所示:

12、格式化數字字串

sprintf最常見的應用之一莫過於把整數列印到字串中。如:

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

sprintf(s, 「%d」, 123); //產生「123″

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

sprintf(s, 「%8d%8d」, 123, 4567); //產生:「 123 4567″

當然也可以左對齊:

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

(3)也可以按照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的方式。

這裡要注意乙個符號擴充套件的問題:比如,假如我們想列印短整數

(4)(short)-1的記憶體16進製表示形式,在win32平台上,乙個 short型佔2個位元組,所以我們自然希望用4個16進製制數字來列印它:

short si = -1;

sprintf(s, 「%04x」, si);

產生「ffffffff,怎麼回事?因為 sprintf是個變參函式,除了前面兩個引數之外,後面的引數都不是型別安全的,函式更沒有辦法僅僅通過乙個「%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進製表示。

參考:

C 語言中的 sprintf 函式

提到printf函式以後,就必然要提到sprintf函式 sprintf 函式是c 語言用來格式化的主要方法,其函式原形如下所示。int sprintf char str,const char format,太多詳細的用法還沒有了解到,只是說明自己的理解 sprintf是列印到字串中,不是列印到螢幕...

C語言中sprintf 函式的用法

sprintf函式的用法 1 該函式包含在stdio.h的標頭檔案中。2 sprintf和平時我們常用的printf函式的功能很相似。sprintf函式列印到字串中,而printf函式列印輸出到螢幕上。sprintf函式在我們完成其他資料型別轉換成字串型別的 操作中應用廣泛。3 sprintf函式的...

C語言中sprintf 函式的用法

1 該函式包含在stdio.h的標頭檔案中。2 sprintf和平時我們常用的printf函式的功能很相似。sprintf函式列印到字串中,而printf函式列印輸出到螢幕上。sprintf函式在我們完成其他資料型別轉換成字串型別的操作中應用廣泛。3 sprintf函式的格式 int sprintf...