sscanf 函式的詳解

2021-08-09 08:52:33 字數 3563 閱讀 9758

1.sscanf 的引數可以是乙個或多個 ]type | ' ' | '\t' | '\n' | 非%符號}

2.返回值:返回值 成功則返回引數數目,失敗則返回-1。

1. 常見用法。

string = "china beijing 123";  

ret = sscanf(string, "%s %s %d", buf1, buf2, &digit);

printf("1.string=%s\n", string);

printf("1.ret=%d, buf1=%s, buf2=%s, digit=%d\n\n", ret, buf1, buf2, digit);

/* **執行結果:

**1.ret=3, buf1=china, buf2=beijing, digit=123

**可以看出,sscanf的返回值是讀取的引數個數

*/

2. 取指定長度的

字串。如在下例中,取最大長度為4

位元組的字串。

string = "123456789";  

sscanf(string, "%5s", buf1);

printf("2.string=%s\n", string);

printf("2.buf1=%s\n\n", buf1);

/* **執行結果:

**2.buf1=12345

*/

3. 取到指定字元為止的字串。如在下例中,取遇到任意小寫字母為止的字串。

string = "123/456";  

sscanf(string, "%[^/]", buf1);

printf("3.string=%s\n", string);

printf("3.buf1=%s\n\n", buf1);

/* **執行結果:

**3.buf1=123

*/

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

sscanf("123456abcdedfbcdef","%[1-9a-z]",buf);

printf("%s\n",buf);

結果為:123456abcdedf

當輸入:  sscanf("123456abcdedfbcdef","%[1-9a-z]",buf);

printf("%s\n",buf);

結果為:123456bcdef(錯!!)

注:結果應該為:123456【因為遇到不是1-9或者a-z的字元時,即遇到小寫字母時,就已經結束】

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

string = "ioswp7";  

sscanf(string, "%*[^<]<%[^>]", buf1);

printf("6.string=%s\n", string);

printf("6.buf1=%s\n\n", buf1);

/* **執行結果:

**6.buf1=android

*/

7、給定乙個字串「hello, world」,僅保留world。

(注意:「,」之後有一空格,%s遇空格停止,加*則是忽略第乙個讀到的字串)

sscanf(「hello,world」,"%*s%s",buf);

printf("%s\n",buf);

結果為:world

%*s表示第乙個匹配到的%s被過濾掉,即「hello,」被過濾了

如果沒有空格則結果為null。

8、最簡明的格式是tab間隔的字串

sscanf(「字串1\t字串2\t字串3」,"%s%s%s",str1,str2,str3);

printf("%s\t%s\t%s\n",str1,str2,str3);

結果為:字串1 字串2 字串3

9.指定要跳過的字串

string = "iosvsandroid";  

sscanf(string, "%[a-z]vs%[a-z]", buf1, buf2);

printf("7.string=%s\n", string);

printf("7.buf1=%s, buf2=%s\n\n", buf1, buf2);

/* **執行結果:

**7.buf1=ios, buf2=android

*/

10.分割以某字元隔開的字串

string = "android-iphone-wp7";  

/* **字串取道'-'為止,後面還需要跟著分隔符'-',

**起到過濾作用,有點類似於第7點

*/

sscanf(string, "%[^-]-%[^-]-%[^-]", buf1, buf2, buf3);

printf("8.string=%s\n", string);

printf("8.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3);

/* **執行結果:

**8.buf1=android, buf2=iphone, buf3=wp7

*/

11.提取郵箱位址

string = "email:[email protected]";  

sscanf(string, "%[^:]:%[^@]@%[^.].%s", buf1, buf2, buf3, buf4);

printf("9.string=%s\n", string);

printf("9.buf1=%s, buf2=%s, buf3=%s, buf4=%s\n\n", buf1, buf2, buf3, buf4);

/* **執行結果:

**9.buf1=email, buf2=beijing, buf3=sina, buf4=com.cn

*/

sscanf函式詳解

同 都是用於資料輸入的函式。異 scanf以螢幕 鍵盤 為輸入源,sscanf以固定字串為輸入源。先定義乙個字串str 10 然後用sscanf函式對其操作,對比前後變化來感受sscanf函式的各種功能。拷貝字串 sscanf abcde s str str abcde 0?把源字串拷貝到str的前...

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類似,都是用於輸入的,只...