同:都是用於資料輸入的函式。
異:scanf以螢幕(鍵盤)為輸入源,sscanf以固定字串為輸入源。
先定義乙個字串str[10]="??????????"
,然後用sscanf函式對其操作,對比前後變化來感受sscanf函式的各種功能。
1、拷貝字串
sscanf
("abcde"
,"%s"
,str);//
str=
"abcde\0????"
把源字串拷貝到str的前5個字元,並把str的第六個字元賦值為空字元,即\0
;
2、拷貝指定長度字串
sscanf
("abcde"
,"%4s"
,str);//
str=
"abcd\0?????"
可以看到,只把源字串的前4個字元拷貝到了str裡面,並把str的第五個字元賦值為\0
;
3、拷貝包含在指定字符集的字元
sscanf
("abcabc"
,"%[a-z]"
,str)
;//"%[a,z]"是不對的
str=
"abc\0??????"
只把包含在區間[a,z]的字元拷貝到str裡面
4、拷貝不包含在指定字符集的字元
sscanf
("abcabcabc"
,"%[^a-z]"
,str)
; str=
"abc\0??????"
「 ^ 」表示邏輯非,所以,不屬於a到z的字元會被拷貝到str中去。但是為什麼源字串中明明有兩個abc,卻只拷貝進去乙個呢?是因為當sscanf掃瞄到不符合條件(即屬於a
-z)的字元時,就會結束掃瞄,跳出sscanf函式;
注:「^」後面可帶多個條件,且都受其作用,如:[^a-za]
表示^a-z且^a
(既不是小寫字母,也不是大寫a)。
5、sscanf中「 * 」的用法舉例
sscanf
("abcaaaabc"
,"%*[a-z]%[^a-z]"
,str);//
str=
"aaa\0??????"
「 * 」可理解為忽略,以上表示先忽略a-z
,然後拷貝不屬於a
-z的字元給str。
6、利用「 %* 」拷貝兩個指定字元之間的字串
sscanf
("abchellodefghijk"
,"%*[^c]c%[^d]"
,str)
;//分隔符為'c'
str=
"hello\0????"
拷貝字元'c'和'd'之間的字串。要知道如果不用「*」過濾掉前面的字元,就沒法拷貝中間的字元。
注:sscanf(「abchellodefghijk」,"%*[ ^c]c%[ ^d]",str);紅色部分的字元必須是一樣的,表示把字元』c』忽略。
7、不用「 % * 」取中間字串
剛說過這是不可能的
ssanf
("aaaaaabbb"
,"%[a-z]"
,str)
; 如果你以為str=
"aaa\0??????"
,那你就錯了,因為sscanf掃瞄到第乙個字元'a'時就發現不符合[a-z]
,就會停止掃瞄了。
所以str並沒有變,即str=
"??????????"
,這驗證了(6)中所說不用「 * 」,無法拷貝中間的字串。
特別說明:「%」不可連續使用(如%[a-z]%[a-z]),連續使用會使後面的乙個無意義。「%* 」可以連續使用(如%*[ a-z]% *[a-z],表示先過濾小寫字母,再過濾大寫字母)。
8、利用sscanf把字串轉化成數字
int a,b,c;
char str1[
100]
="111,222,333"
;//sscanf(str1,"%d,%d,%d",&a,&b,&c);效果一樣,如果是string物件則不可這樣
sscanf
("111,222,333"
,"%d,%d,%d"
,&a,
&b,&c)
; a=
111;b=
222,c=
333;同(
6)一樣,分隔符(百分號之間的符號。本列為「,」,也可以是其他各種符號)必須保持一致;
如:sscanf
("1a2"
,"%da%d"
,&a,
&b);
//a=1;b=2;
sscanf函式用法詳解
sscanf函式用法詳解 名稱 sscanf 從乙個字串中讀進與指定格式相符的資料.函式原型 int sscanf string str,string fmt,mixed var1,mixed var2 int scanf const char format argument 說明 sscanf與s...
sscanf函式用法詳解
sscanf 從乙個字串中讀進與指定格式相符的資料.函式原型 int sscanf string str,string fmt,mixed var1,mixed var2 int scanf const char format argument 說明 sscanf與scanf類似,都是用於輸入的,只...
sscanf函式用法詳解
名稱 sscanf 從乙個字串中讀進與指定格式相符的資料.函式原型 int sscanf string str,string fmt,mixed var1,mixed var2 int scanf const char format argument 說明 sscanf與scanf類似,都是用於輸入...