sscanf

sscanf

計算機術語
sscanf()-從一個字符串中讀進與指定格式相符的數據。swscanf()-用于處理寬字符字符串,和sscanf功能相同。swscanf是sscanf的寬字符版本;swscanf的參數是寬字符串。sscanf與scanf類似,都是用于輸入的,隻是後者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源。[1]
    中文名: 外文名:sscanf 所屬學科: 類别:數據輸入 解釋:字符串中讀進相符的數據 處理:寬字符字符串 頭文件:stdio.h

相關

sscanf()-從一個字符串中讀進與指定格式相符的數據。

函數原型:intsscanf(constchar*,constchar*,);intsscanf(constchar*buffer,constchar*format,[argument]);buffer存儲的數據format格式控制字符串argument選擇性設定字符串sscanf會從buffer裡讀進數據,依照argument的設定将數據寫回。

返回值

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

經多次測試,在linux系統中成功返回的是全部參數值減2,例如:sscanf("123","%d%d%d",buf1,buf2,buf3);成功調用返回值為3,即buf的數量(總參數個數減前兩個)。

基本說明

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

第一個參數可以是一個或多個{%[*][width][{h|I|I64|L}]type|''|'t'|'n'|非%符号}。

注:

1、*亦可用于格式中,(即%*d和%*s)加了星号(*)表示跳過此數據不讀入。(也就是不把此數據讀入參數中)

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

3、width表示讀取寬度。

4、{h|l|I64|L}:參數的size,通常h表示單字節size,I表示2字節size,L表示4字節size(double例外),l64表示8字節size。

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

6、特别的:%*[width][{h|l|I64|L}]type表示滿足該條件的被過濾掉,不會向目标參數中寫入值。

失敗返回0,否則返回格式化的參數個數。

支持集合

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

%[aB']匹配a、B、'中一員,貪婪性。

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

例子

1、常見用法。

charbuf;

sscanf("123456","%s",buf);//此處buf是數組名,它的意思是将123456以%s的形式存入buf中!

printf("%sn",buf);

結果為:123456

2、取指定長度的字符串。如在下例中,取最大長度為4字節的字符串。

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

printf("%sn",buf);

結果為:1234

3、取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。

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

printf("%sn",buf);

結果為:123456

4、取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。

sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);

printf("%sn",buf);

結果為:123456abcdedf

當輸入:

sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);

printf("%sn",buf);

結果為:123456

5、取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串。

sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);

printf("%sn",buf);

結果為:123456abcdedf

6、給定一個字符串iios/12DDWDFF@122,獲取/和@之間的字符串,先将"iios/"過濾掉,再将非'@'的一串内容送到buf中。

sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);

printf("%sn",buf);

結果為:12DDWDFF

7、給定一個字符串"hello,world",僅保留world。(注意:","之後有一空格,%s遇空格停止,加*則是忽略第一個讀到的字符串)

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

printf("%sn",buf);

結果為:world

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

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

相關詞條

相關搜索

其它詞條