C C語言中的sprintf和sscanf

2021-07-22 14:49:12 字數 3154 閱讀 1400

int sscanf(const char *s,const char *format,..);

int scanf(const char *format,...);

sscanf與scanf類似,都是用於輸入的,只是後者以鍵盤(stdin)為輸入源,前者以固定字串為輸入源。

buffer儲存的資料

format格式控制字串

argument 選擇性設定字串

成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。

1  * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)

2 表示a,b,c中選一,[d],表示可以有d也可以沒有d。

3 width表示讀取寬度。

4 :引數的size,通常h表示單位元組size,i表示2位元組 size,l表示4位元組size(double例外),l64表示8位元組size。

5 type :這就很多了,就是%s,%d之類。

6 特別的:%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值。失敗返回0 ,否則返回格式化的引數個數

7 支援集合操作

%[a-z] 表示匹配a到z中任意字元,貪婪性(盡可能多的匹配)

%[ab'] 匹配a、b、'中一員,貪婪性

%[^a] 匹配非a的任意字元,並且停止讀入,貪婪性

ch="memtotal:        2028248 kb"

sscanf(ch,"%*s%d",&total);

printf("%d\n",total);

輸出結果:2028248

sscanf("123456 ", "%4s", buf);

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

輸出結果:1234 

sscanf("123456 abcdedf", "%[^ ]", buf);

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

結果為:123456 

尋找e到2之間的數,包括e但不包括2

如果中間有空格,包括空格。

sscanf(「hello, world」, "%*s%s", buf);

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

結果為:world

%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了

如果沒有空格則結果為null。

sscanf("2006:03:18", "%d:%d:%d", a, b, c); 

sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

如果2006:03:18 - 2006:04:18間沒有空格

sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);

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

extern int printf(const char *format,...);

函式printf根據指定的格式將引數輸出到螢幕上;

函式sprintf根據指定的格式將引數輸出到由指標buffer指定的字元陣列(字元緩衝區)中;

buffer:char型指標,指向將要寫入的字串的緩衝區。

format:格式化字串。

[argument]...:可選引數,可以是任何型別的資料。

返回寫入buffer 的字元數,出錯則返回-1. 如果 buffer 或 format 是空指標,且不出錯而繼續,函式將返回-1,並且 errno 會被設定為 einval。

sprintf 返回被寫入buffer 的位元組數,結束字元『\0』不計入內。即,如果「hello」被寫入空間足夠大的buffer後,函式sprintf 返回5。

sprintf格式的規格如下所示。中的部分是可選的。

%[指定引數][識別符號][寬度][.精度]指示符

若想輸出'%'本身時, 請使用'%%'處理。

1. 處理字元方向。負號時表示從後向前處理。

2. 填空字元。 0 的話表示空格填 0;空格是內定值,表示空格就放著。

3. 字元總寬度。為最小寬度。

4. 精確度。指在小數點後的浮點數字數。

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

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

sprintf(s, "%.7s%.7s", a1, a2);//產生:"abcdefghijklmn"

這可以模擬列印浮點數的」%m.nf」,在」%m.ns」中,m 表示占用寬度(字串長度不足時補空格,超出了則按照實際寬度列印),n 才表示從相應的字串中最多取用的字元數。通常在列印字串時m 沒什麼大用,還是點號後面的n 用的多。自然,也可以前後都只取部分字元:

sprintf(s, "%.6s%.5s", a1, a2);//產生:"abcdefhijkl"

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"

int len = sprintf(s, "%d", i);

對於正整數來說,len 便等於整數i 的10 進製位數。 

C語言中的sprintf

c中的sprintf函式使用也算比較頻繁了。之前了解不深入,今天總結一下 感謝傳送門 sprintf函式的用法 sprintf函式的格式int sprintf char buffer,const char format argument,除了前兩個引數固定外,可選引數可以是任意個。buffer是字元...

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函式的...