強大的sscanf函式

2021-08-01 14:17:41 字數 2258 閱讀 1589

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 結果為...