函式原型:
int fscanf ( file *stream, char const *format, . . . );
int sscanf( string str, string format, mixed var1, mixed var2 ... );
int scanf( const char *format [,argument]... );
說明:返回值:
失敗返回0 ,否則返回格式化的引數個數
f-file; s-string
fscanf():以指定檔案為輸入源
sscanf():
以固定字串為輸入源
scanf():以標準(stdin)為輸入源,預設輸入裝置鍵盤
其中的format可以是乙個或多個 ]type | ' ' | '\t' | '\n' | 非%符號}
支援集合操作: (集合預設處理字串後不用加s)
%[a-z] 結果只儲存a到z中任意字元
%[ab'] 匹配a、b、'中一員
%[^a] 匹配從字串開始到非a的任意字元
%*[a-z]
其中集合操作也支援*過濾。
:引數的size,通常h表示單位元組size,i表示2位元組 size,
l表示4位元組size(double例外),l64表示8位元組size。
例子:
1. 常見用法。
char buf[512] = ;
sscanf("123456 ", "%s", buf);
printf("%s\n", buf);
結果為:123456 | sscanf=1;
2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
結果為:1234 |sscanf=1
3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
結果為:123456 |sscanf=1
4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
sscanf("123456abcdedfbcdef", "%[1-9a-z]", buf);
printf("%s\n", buf);
結果為:123456abcdedf
|sscanf=1
5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。
sscanf("123456abcdedfbcdef", "%[^a-z]", buf);
printf("%s\n", buf);
結果為:123456abcdedf
|sscanf=1
下面這個還有意思仔細理解下:
6、給定乙個字串
iios/12ddwdff@122,獲取 / 和 @ 之間的字串,先將 "iios/"過濾掉,再將非
'@'的一串內容送到buf中
sscanf("
iios/12ddwdff@122", "%*[^/]/%[^@]", buf);
printf("%s\n", buf);
結果為:12ddwdff
|sscanf=1
sscanf("
iios/12ddwdff@122
", "%[^/]/%[^@]", buf1,buf2);
printf("%s\n", buf1);
printf("%s\n", buf1);
結果:buf1=iios ;
buf2=/12ddwdff | sscanf=2
由此我們可以得出結論,format中格式符%是從前乙個格式符%處理到的字元下乙個字元開始處理字串,而不是從新開始處理字串。
7、給定乙個字串「「hello, world」,僅保留world。(注意:「,」之後有一空格)
sscanf(「hello, world」, "%*s%s", buf);
printf("%s\n", buf);
結果為:world
|sscanf=1
%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了
如果沒有空格則結果為null。
8、
char *s="1try234delete5"
則:
sscanf(s, "1%[^2]234%[^5]", s1, s2);
|sscanf=2
scanf的format中出現的非轉換字元(%之前或轉換字元之後的字元),即此例中的1234用來跳過輸入中的相應字元;
『』的含義與正規表示式中相同,表示匹配其中出現的字串行;^表示相反。使用[ ]時接收輸入的變數必須是有足夠儲存空間的char、signed char、unsigned char陣列。記住[也是轉換字元,所以沒有s了。
8、分割以某字元標記的字串。()
char test="111,222,333,444,555,666,777";
char s1[4],s2[4],s3[4],s4[4],s5[4],s6[4],s7[4];
sscanf(test,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]",s1,s2,s3,s4,s5,s6,s7);
printf("sssa1=%s\n",s1);
printf("sssa2=%s\n",s2);
printf("sssa3=%s\n",s3);
printf("sssa4=%s\n",s4);
printf("sssa5=%s\n",s5);
printf("sssa6=%s\n",s6);
printf("sssa7=%s\n",s7);
9、fprintf(fp,"%s %s",a,b); 讀取兩個字串分別賦值給a,b
fprintf(fp,"%s,%s",a,b); 讀取乙個字串然後按format賦值給a,但是b的值不定。
sscanf 函式用法
read formatted data from a string.intsscanf constchar buffer,constchar format argument intswscanf constwchar t buffer,constwchar t format argument a f...
sscanf 函式小結
1.常見用法。char buf 512 sscanf 123456 s buf 此處buf是陣列名,它的意思是將123456以 s的形式存入buf中!printf s n buf 結果為 123456 2.取指定長度的字串。如在下例中,取最大長度為4位元組的字串。sscanf 123456 4s b...
sscanf()函式總結
sscanf 的作用 從乙個字串中讀進與指定格式相符的資料.原型 int sscanf const char str,const char format,說明 sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。轉換後的結果存於對應的引數內。成功則返回引數數目,失敗則返回0...