當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > sscanf函數(shù)的用法
sscanf函數(shù)的用法
時(shí)間:2014-09-16 來(lái)源:未知
函數(shù)原型:int sscanf(const char *str, const char *format, [argument]...);
函數(shù)功能:sscanf會(huì)從str里讀進(jìn)數(shù)據(jù),依照f(shuō)ormat的格式將數(shù)據(jù)寫(xiě)入到argument里。
參數(shù):str存儲(chǔ)的數(shù)據(jù)
format格式控制字符串
argument 選擇性設(shè)定字符串
返回值:成功則返回參數(shù)數(shù)目,失敗則返回-1,錯(cuò)誤原因存于errno中。
format支持的常見(jiàn)格式如下:
%[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); //結(jié)果為:123456
//取指定長(zhǎng)度的字符串
sscanf("123456", "%4s", buf);
printf("%s\n", buf); //結(jié)果為:1234
// 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串
sscanf("12345 6abcdef", "%[^ ]", buf);
printf("%s\n", buf); //結(jié)果為:12345
//取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫(xiě)字母的字符串
sscanf("1B2A3456abcdefBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf); //結(jié)果為:1
//取到指定字符集為止的字符串。如在下例中,取遇到大寫(xiě)字母為止的字符串
sscanf("12A3456abcdefBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf); //結(jié)果為:12
//給定一個(gè)字符串iios/12DDWDFF@122,獲取 / 和 @ 之間的字符串,先將 "iios/"過(guò)濾掉,再將非'@'的一串內(nèi)容送到buf中
sscanf("iios/12DFSD@122", "%*[^/]/12D%[^@]", buf);
printf("%s\n", buf); //結(jié)果為:FSD
//給定一個(gè)字符串“h e,l, world”,去掉第一個(gè)字符串。(注意:“,”之后有一空格,%s遇空格停止,加*則是忽略第一個(gè)讀到的字符串)
sscanf("h e,l lloworld", "%*s%s", buf);
printf("%s\n", buf); //結(jié)果為:e,1
return 0;
}
程序執(zhí)行結(jié)果如下:
linux@ubuntu:~/thread/alarm$ cc sscanf.c
linux@ubuntu:~/thread/alarm$ ./a.out
123456
1234
12345
1
12
FSD
e,l
華清遠(yuǎn)見(jiàn)90+項(xiàng)目獲批!教育部2021最新協(xié)同育人項(xiàng)目名
華清遠(yuǎn)見(jiàn)榮獲2021騰訊教育“年度口碑影響力職業(yè)教育品
華清遠(yuǎn)見(jiàn)受邀參加2021年武漢民辦高校信息學(xué)科合作聯(lián)盟
溫暖同行共創(chuàng)佳績(jī) 2019華清遠(yuǎn)見(jiàn)北京總部年會(huì)大曝光
助力高校AI人工智能學(xué)科建設(shè) 華清遠(yuǎn)見(jiàn)人工智能師資班
華清遠(yuǎn)見(jiàn)受邀參加四川省物聯(lián)網(wǎng)年會(huì),榮獲優(yōu)秀企業(yè)專(zhuān)家