轉自:http://www.cnblogs.com/kangwang1988/archive/2011/06/06/2073801.html
標頭檔 #include
定義函數 int sscanf (const char *str,const char * format,........);
函數說明
sscanf()會將參數str的字串根據參數format字串來轉換並格式化資料。格式轉換形式請參考scanf()。轉換後的結果存於對應的參數內。
傳回值 成功則返回參數數目,失敗則返回-1,錯誤原因存於errno中。 返回0表示失敗 否則,表示正確格式化資料的個數 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三個變成都讀入成功會返回3。 如果唯讀入了第一個整數到i則會返回1。證明無法從str讀入第二個整數。
範例 #include
main()
{
int i;
unsigned int j;
char input[ ]=”10 0x1b aaaaaaaa bbbbbbbb”;
char s[5];
sscanf(input,”%d %x %5[a-z] %*s %f”,&i,&j,s,s);
printf(“%d %d %s ”,i,j,s);
}
執行 10 27 aaaaa
sscanf(stringBuf.c_str(), "%20[^#]#%20[^ ]",......)語句中""中的內容含義為:
“%[
]”符號用於聲明字串,它比“%s”更具體,可以用於設定讀取的樣式。例如“%[a-z]”唯讀取小寫字母,讀到其它字元就結束。注意,方括弧中如果有“^”,代表一直讀到某字元為止。例如:
“%[^#]”:讀取字串,一直到出現“#”號為止。
“%20[^#]”:讀取20個位元組的字串,出現“#”號時結束。
所以,“%20[^#]#%20[^ ]”的意義就是,
讀取兩個20位元組大小的字串,第一個字串可以用#結束,第二個字串可以用斷行符號符結束。
它們的具體闡述,參見MSDN:“scanf Type Field Characters”章節,和“scanf Width
Specification”章節。
*********************************************************************************************************************************************
大家都知道sscanf是一個很好用的函數,利用它可以從字串中取出整數、浮點數和字串等等。它的使用方法簡單,特別對於整數和浮點數來說。但新手可能並不知道處理字串時的一些進階用法,這裡做個簡要說明吧。
1. 常見用法。
以下是引用片段:
charstr[512]={0};
sscanf("123456","%s",str);
printf("str=%s
",str);
2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
以下是引用片段:
sscanf("123456","%4s",str);
printf("str=%s
",str);
3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
以下是引用片段:
sscanf("123456abcdedf","%[^]",str);
printf("str=%s
",str);
4. 取僅包含指定字元集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
以下是引用片段:
sscanf("123456abcdedfBCDEF","%[1-9a-z]",str);
printf("str=%s
",str);
5. 取到指定字元集為止的字串。如在下例中,取遇到大寫字母為止的字串。
以下是引用片段:
sscanf("123456abcdedfBCDEF","%[^A-Z]",str);
printf("str=%s",str);