1、前言git
本節,咱們將學習C語言庫函數sscanf()的使用,使用sscanf能夠快速的從複雜字符串中獲取本身須要的數據。github
2、基礎知識ide
1.簡介函數
sscanf與scanf相似,都是用於輸入的,只是後者以鍵盤(stdin)爲輸入源,前者以固定字符串爲輸入源。學習
2.函數描述3d
int sscanf(const char buffer, const char format, [argument]...);
參數:
buffer:須要解析的源字符串
format:窗體控件字符串,定義解析字符串的規則,能夠是一個或多個
{%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}
argument:可選變量,用來存儲按照format規則解析buffer的結果code
注:
(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 ,不然返回格式化的參數個數
(7) 若是讀取的字符串,不是以空格來分隔的話,就可使用%[]。orm
使用時候須要包含頭文件:#include<stdio.h>blog
3、基礎知識字符串
1.簡單用法
#include <stdio.h> char *str = "123456 hello world"; int main(void) { int num = 0; char str1[64] = { 0x00 }; char str2[64] = { 0x00 }; sscanf(str, "%d %s %", &num, str1, str2); printf("num : %d\r\nstr1 : %s\r\nstr2 : %s\r\n", num, str1, str2); return 0; }
執行結果以下:
2.取指定長度字符串
#include <stdio.h> char *str = "123456"; int main(void) { char res[64] = { 0x00 }; sscanf(str, "%4s", res); printf("res is: %s\r\n", res); return 0; }
執行結果以下:
3. * 格式使用
(*)表示跳過此數據不讀入,也就是不把數據讀入參數中 #include <stdio.h> int main(void) { char *str = "123456hello world"; char res[64] = { 0x00 }; char res1[64] = { 0x00 }; sscanf(str, "%*d%s %s", res, res1); printf("res is: %s\r\nres1 is: %s\r\n", res, res1); return 0; }
執行結果以下:
4. %[]格式使用
(1) 獲取遇到指定字符爲止的字符串
#include <stdio.h> int main(void) { char *str = "hello+world"; char res[64] = { 0x00 }; char res1[64] = { 0x00 }; sscanf(str, "%[^+]+%s", res, res1); printf("res is: %s\r\nres1 is: %s\r\n", res, res1); return 0; }
執行結果以下:
(2) 獲取遇到空格爲止的字符串
#include <stdio.h> int main(void) { char *str = "hello world"; char res[64] = { 0x00 }; char res1[64] = { 0x00 }; sscanf(str, "%[^ ] %s", res, res1); printf("res is: %s\r\nres1 is: %s\r\n", res, res1); return 0; }
執行結果以下:
5.取指定字符集的字符串
#include <stdio.h> int main(void) { char *str = "hello123456HELLO"; char res[64] = { 0x00 }; sscanf(str, "%[a-z1-9]", res); printf("res is: %s\r\n", res); return 0; }
執行結果以下:
4、結語
本節完,實際操做過程當中須要注意的地方有以下幾點:
(1) %[^]只取到指定字符串,如繼續獲取以後字符串須要作處理,如上述第4小例。
這次執行不能正常獲取到"world"而獲取了「+world",就是因爲%[^]不取該字符,使用時候須要特別注意。
2.後記:
如您在使用過程當中有任何問題,請加QQ羣進一步交流,也能夠github提Issue。
QQ交流羣:906015840 (備註:物聯網項目交流)
github倉庫地址:https://github.com/solitary-sand/c
一葉孤沙出品:一沙一世界,一葉一菩提