函數原型:int sscanf(const char *str, const char *format, [argument]...);
函數功能:sscanf會從str里讀進數據,依照format的格式將數據寫入到argument里。
參數:str存儲的數據
format格式控制字符串
argument 選擇性設定字符串
返回值:成功則返回參數數目,失敗則返回-1,錯誤原因存于errno中。
format支持的常見格式如下:
%[a-z] 表示匹配a到z中任意字符
%[aB'] 匹配a、B、'中一員,貪婪性
%[^a] 匹配非a的任意字符,并且停止讀入,貪婪性
示例代碼如下:
#include <stdio.h>
#define N 128
int main()
{
char buf[N] = {0};
sscanf("123456", "%s", buf);
printf("%s\n", buf); //結果為:123456
//取指定長度的字符串
sscanf("123456", "%4s", buf);
printf("%s\n", buf); //結果為:1234
// 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串
sscanf("12345 6abcdef", "%[^ ]", buf);
printf("%s\n", buf); //結果為:12345
//取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串
sscanf("1B2A3456abcdefBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf); //結果為:1
//取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串
sscanf("12A3456abcdefBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf); //結果為:12
//給定一個字符串iios/12DDWDFF@122,獲取 / 和 @ 之間的字符串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中
sscanf("iios/12DFSD@122", "%*[^/]/12D%[^@]", buf);
printf("%s\n", buf); //結果為:FSD
//給定一個字符串“h e,l, world”,去掉第一個字符串。(注意:“,”之后有一空格,%s遇空格停止,加*則是忽略第一個讀到的字符串)
sscanf("h e,l lloworld", "%*s%s", buf);
printf("%s\n", buf); //結果為:e,1
return 0;
}
程序執行結果如下:
linux@ubuntu:~/thread/alarm$ cc sscanf.c
linux@ubuntu:~/thread/alarm$ ./a.out
123456
1234
12345
1
12
FSD
e,l