int sscanf( const char *buffer, const char *format, [ argument ] … );
buffer
儲存的資料
format
格式控制字串。
argument
可選自變數
sscanf
sscanf與scanf類似,都是用於輸入的,只是後者以鍵盤(stdin)為輸入源,前者以固定字串為輸入源。
第二個引數可以是乙個或多個 ]type | 』 』 | 『\t』 | 『\n』 | 非%符號}
注:* 亦可用於格式中, (即 %d 和 %*s) 加了星號 () 表示跳過此資料不讀入,(也就是不把此資料讀入引數中);
表示a,b,c中選一,[d],表示可以有d也可以沒有d;
width表示讀取寬度;
:引數的size,通常h表示單位元組size,i表示2位元組 size,l表示4位元組size(double例外),l64表示8位元組size;
type :這就很多了,就是%s,%d之類;
特別的:%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值。
每個函式都將返回成功轉換並分配的字段數;返回值不包括已讀取但未分配的字段。 返回值為 0 表示沒有分配任何字段。 返回值是eof是否有錯誤或如果在第一次轉換之前到達字串結尾。
如果buffer或format是null呼叫指標,無效引數處理程式,如中所述引數驗證。 如果允許繼續執行,則這些函式返回 -1 並將errno設定為einval。
成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。
經多次測試,在linux系統中成功返回的是成功轉換的值的個數,例如:
讀取格式化的字串中的資料。
一般用法
char buf[512] = ;
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);
結果為:123456
2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
結果為:1234
取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
結果為:123456
4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
sscanf("123456abcdedfbcdef", "%[1-9a-z]", buf);
printf("%s\n", buf);
結果為:123456abcdedf
5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。
sscanf("123456abcdedfbcdef", "%[^a-z]", buf);
printf("%s\n", buf);
結果為:123456abcdedf
6. 給定乙個字串iios/12ddwdff@122,獲取 / 和 @ 之間的字串,先將 「iios/」過濾掉,再將非』@』的一串內容送到buf中
sscanf("iios/12ddwdff@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
結果為:12ddwdff
7. 給定乙個字串」hello, world」,僅保留」world」。(注意:「,」之後有一空格)
sscanf(「hello, world」, "%*s%s", buf);
printf("%s\n", buf);
結果為:world
p.s. %*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了,如果沒有空格則結果為null。
8. 最後給乙個轉換點分十進位制ip的例項
#include
void main()
注意後面的buf,buf+1…都是位址,千萬不能寫成buf[0],buf[1]…這樣sscanf取出來的數存在位址為buf[0]的空間裡,會產生段錯誤的。 功能強大的sscanf 函式
int sscanf const char src,const char format,int scanf const char format,這兩個函式很相似,只是第乙個函式以src作為輸入,而第二個函式以標準輸入stdin讀取輸入 format 是格式控制字串,它包含控制字元 如 d,i,s等 ...
強大的sscanf正規表示式
當 sscanf 與 正規表示式 結合,我們便可以非常方便地解析字串了。廢話不多說,直入主題。對於字串 注意,分隔符是 t 不是空格 line 2016 10 13 北京市海淀區 monday 張三 學習 從中解析出 date,place time person action。思路 其實 sscan...
sscanf函式的用法
sscanf與 scanf 類似,都是用於輸入的,只是後者以鍵盤 stdin 為輸入源,前者以固定字串為輸入源。1.常見用法。char buf 512 sscanf 123456 s buf 此處buf是 陣列名,它的意思是將123456以 s的形式存入buf中 printf s n buf 結果為...