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