亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

c語言 sscanf,scanf,fscanf正則表達式用法

2020-05-23 13:35:09
字體:
來源:轉載
供稿:網友

每種語言都對正則表達式有著不同程度的支持,在C語言中,有輸入功能的這三個函數對正則表達式的支持并不強大,但是我們還是有必要了解一下。

首先來看看他們的原型:

#include <stdio.h>int scanf(const char *format, ...);int fscanf(FILE *stream, const char *format, ...);int sscanf(const char *str, const char *format, ...);

均可以接受變參,sscanf與scanf類似,可以將標準輸入(stdin)作為輸入源。最關鍵的部分,就是format這個參數了。它可以是一個或者多個 {%[*] [width] [{h | l | 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 表示滿足該條件的被過濾掉,不會向目標參數中寫入值

支持的集合操作:%[a-z] 表示匹配a到z中任意字符,貪婪性(盡可能多的匹配)%[aB'] 匹配a、B、'中一員,貪婪性%[^a] 匹配非a的任意字符,貪婪性

返回值

這三個函數返回成功匹配和分配的輸入項。意思就是你在format參數列表中的格式,返回值可以比你提供的匹配項目數少(有些將會匹配失敗)。提前匹配失敗則返回0。如果達到文件末尾,則返回EOF,當發生錯誤的時候也將返回EOF。你可以通過輸出errno來查看錯誤代碼。

如果使用fscanf來判斷文件是否結束,將會存在安全隱患,如果每次讀取的時候都是匹配失敗,那么返回值永遠都不會是EOF。scanf族的函數都是要先將數據讀入緩沖區,然后在沖緩沖里讀取。

注意:scanf族函數會忽略一行開始的空白

sscanf/scanf正則用法

%[ ] 的用法:

 %[ ] 表示要讀入一個字符集合 , 如果 [ 后面第一個字符是 ”^” ,則表示反意思。

[ ] 內的字符串可以是 1 或更多字符組成。空字符集( %[] )是違反規定的,可

導致不可預知的結果。 %[^] 也是違反規定的。

%[a-z] 讀取在 a-z 之間的字符串,如果不在此之前則停止,如

char s[]="hello, my friend” ; // 注意 : , 逗號在不 a-z 之間sscanf( s, “%[a-z]”, string ) ; // string=hello

%[^a-z] 讀取不在 a-z 之間的字符串,如果碰到 a-z 之間的字符則停止,如

char s[]="HELLOkitty” ;// 注意 : , 逗號在不 a-z 之間sscanf( s, “%[^a-z]”, string ) ; // string=HELLO

%*[^=] 前面帶 * 號表示不保存變量。跳過符合條件的字符串。

char s[]="notepad=1.0.0.1001" ;char szfilename [32] = "" ;int i = sscanf( s, "%*[^=]", szfilename ) ; // szfilename=NULL, 因為沒保存int i = sscanf( s, "%*[^=]=%s", szfilename ) ; // szfilename=1.0.0.1001

%40c 讀取 40 個字符

The run-time
library does not automatically append a null terminator to the string, nor does reading 40 characters
automatically terminate the scanf() function. Because the library uses buffered input, you must press the ENTER key to terminate the string scan. If you press the ENTER before the scanf() reads 40 characters, it is displayed normally, and the library continues to prompt for additional input until it reads 40 characters

%[^=] 讀取字符串直到碰到 '=' 號, '^' 后面可以帶更多字符 , 如:

char s[]="notepad=1.0.0.1001" ;char szfilename [32] = "" ;int i = sscanf( s, "%[^=]", szfilename ) ; // szfilename=notepad 

如果參數格式是: %[^=:] ,那么也可以從 notepad:1.0.0.1001 讀取 notepad

使用例子:

char s[]="notepad=1.0.0.1001" ;char szname [32] = "" ;char szver [32] = “” ;sscanf( s, "%[^=]=%s", szname , szver ) ; // szname=notepad, szver=1.0.0.1001

總結: %[] 有很大的功能,但是并不是很常用到,主要因為:

1 、許多系統的 scanf 函數都有漏洞 . ( 典型的就是 TC 在輸入浮點型時有時會出錯 ).
2 、用法復雜 , 容易出錯 .
3 、編譯器作語法分析時會很困難 , 從而影響目標代碼的質量和執行效率 .

個人覺得第 3 點最致命,越復雜的功能往往執行效率越低下。而一些簡單的字符串分析我們可以自已處理。

C語言中scanf(),sscanf(),fscanf()的用法和區別

scanf(),sscanf(),fscanf()區別:
第一個是從控制臺(鍵盤)輸入;
第二個是從字符串輸入;
第三個是從文件輸入;
scanf
scanf()函數根據由format(格式)指定的格式從stdin(標準輸入)讀取,并保存數據到其它參數.

int main(){  int a,b,c;  printf("輸入:a,b,c/n");  scanf("%d,%d,%d",&a,&b,&c);  printf("a = %d b = %d c = %d",a,b,c);  return 0;}

sscanf
函數sscanf()和scanf()類似, 只是輸入從buffer(緩沖區)中讀取.
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源

用法:
%[ ]表示要讀入一個字符集合, 如果[ 后面第一個字符是”^”,則表示反意思。[ ]內的字符串可以是1或更多字符組成??兆址?[])是違反規定的,可導致不可預知的結果。%[^]也是違反規定的。

1. 常見用法。

char buf[512] ;
sscanf("123456 ", "%s", buf);//此處buf是數組名,它的意思是將123456以%s的形式存入buf中!
printf("%s/n", buf);
結果為:123456

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

sscanf("123456 ", "%4s", buf);
printf("%s/n", buf);
結果為:1234

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

sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s/n", buf);
結果為:123456

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

sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s/n", buf);
結果為:123456abcdedf
當輸入: sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
printf("%s/n",buf);
結果為:123456

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。

(注意:“,”之后有一空格,%s遇空格停止,加*則是忽略第一個讀到的字符串)
sscanf(“hello, world”, "%*s%s", buf);
printf("%s/n", buf);
結果為:world
%*s表示第一個匹配到的%s被過濾掉,即“hello,”被過濾了
如果沒有空格則結果為NULL。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区久久| 欧美人交a欧美精品| 日韩精品中文字| 国产成人欧美在线观看| 亚洲国产欧美一区| 亚洲欧洲在线看| 亚洲福利视频免费观看| 国产精品电影久久久久电影网| 国产精选久久久久久| 久久夜精品va视频免费观看| 久久久久久久一| 欧美www视频在线观看| 亚洲第一网中文字幕| 亚洲人成电影在线观看天堂色| 色综合久综合久久综合久鬼88| 亚洲国产精品女人久久久| 欧美日韩在线视频一区| 精品一区二区三区四区| 亚洲日韩欧美视频一区| 欧美性一区二区三区| 一本色道久久综合狠狠躁篇的优点| 理论片在线不卡免费观看| 欧美日韩成人网| 久久人人爽亚洲精品天堂| 色综合久综合久久综合久鬼88| 国产精品午夜视频| 91福利视频网| 日本精品视频在线| 欧美精品日韩三级| 亚洲自拍偷拍色图| 日韩www在线| 国产大片精品免费永久看nba| 久久久久久一区二区三区| 成人黄色大片在线免费观看| 北条麻妃在线一区二区| 国产精品久久久久久久久免费看| 国产精品久久激情| 91国产在线精品| 欧美精品一区三区| 国产在线播放不卡| 亚洲人成在线免费观看| 亚洲va欧美va国产综合剧情| 欧美高清在线观看| 大荫蒂欧美视频另类xxxx| 亚洲国产精品久久91精品| 91亚洲人电影| 亚洲第一网站免费视频| 欧美性xxxx极品hd满灌| 91精品视频专区| 国产日韩精品综合网站| 亚洲精品一区二区三区不| 久久国产精品久久久久| 91免费在线视频| 国产在线精品成人一区二区三区| 亚洲欧美成人在线| 欧美—级a级欧美特级ar全黄| 尤物九九久久国产精品的分类| 亚洲国产又黄又爽女人高潮的| 91理论片午午论夜理片久久| 国产精品美女www| 久久人人爽人人爽爽久久| 亚洲一区二区久久| 日韩视频精品在线| 疯狂蹂躏欧美一区二区精品| 欧美精品精品精品精品免费| 茄子视频成人在线| 亚洲国产成人爱av在线播放| 欧美成人免费大片| 精品国产区一区二区三区在线观看| 一本大道亚洲视频| 97成人超碰免| 91精品国产91久久久久| 国产日韩欧美中文| 大胆欧美人体视频| 国产精品1区2区在线观看| 亚洲bt天天射| 亚洲国产精品一区二区久| 日韩免费看的电影电视剧大全| 久久久影视精品| 国产精品久久色| 欧美自拍视频在线| 日韩av一区在线观看| 亚洲国产精品女人久久久| 日韩在线免费观看视频| 少妇高潮 亚洲精品| 91黑丝高跟在线| 久久全国免费视频| 日韩午夜在线视频| 欧美性xxxx在线播放| 国产精品成人一区二区三区吃奶| 欧美激情在线视频二区| 亚洲美女av在线| 亚洲国产精品嫩草影院久久| 欧美激情a∨在线视频播放| 日韩av资源在线播放| 日韩美女主播视频| 亚洲人成在线电影| 亚洲香蕉伊综合在人在线视看| 精品久久久久久电影| 亚洲一区二区三区四区视频| 日韩a**站在线观看| 亚洲欧美自拍一区| 国产精品日日摸夜夜添夜夜av| 午夜精品免费视频| 欧美成年人在线观看| 国产精品久久久久久久一区探花| 国产偷亚洲偷欧美偷精品| 久久精品免费播放| 欧美激情xxxx| 日韩精品极品视频免费观看| 一区二区福利视频| 国产激情视频一区| 国产99久久精品一区二区 夜夜躁日日躁| 这里只有精品视频在线| 国产精品久久久久福利| 精品国产区一区二区三区在线观看| 97国产精品免费视频| 91久久久国产精品| 亚洲成人av资源网| www国产亚洲精品久久网站| 欧美极品少妇全裸体| 不卡av日日日| 欧美大尺度激情区在线播放| 亚洲无限av看| 久久久久中文字幕2018| 国产精品一久久香蕉国产线看观看| 欧美大片免费观看在线观看网站推荐| 欧美老女人bb| 欧美激情一级二级| 久久在精品线影院精品国产| 久热精品视频在线观看| 国产亚洲欧美日韩精品| 中文字幕日韩专区| 久久久久久国产精品三级玉女聊斋| 国产欧美日韩精品在线观看| 国产午夜精品久久久| 亚洲大胆美女视频| 久久久久久免费精品| 色噜噜狠狠狠综合曰曰曰| 97国产suv精品一区二区62| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲国产精品va在线| 日本欧美中文字幕| 成人免费直播live| 爽爽爽爽爽爽爽成人免费观看| 在线观看欧美日韩| 欧美自拍视频在线| 亚洲成年人在线播放| 成人亚洲综合色就1024| 538国产精品一区二区在线| 97免费中文视频在线观看| 91成品人片a无限观看| 久久成人国产精品| 久久视频国产精品免费视频在线| 国产在线视频欧美| www.色综合| 成人激情视频小说免费下载| 国产亚洲精品久久久| 成人性生交大片免费看视频直播| 欧美激情啊啊啊| 综合网日日天干夜夜久久| 日本精品久久久久久久| 亚洲最新av在线网站| 国产精品91一区|