sscanf與ssprintf的用法

2021-08-18 04:07:58 字數 4259 閱讀 2113

一、sscanf函式

1、函式原型

int sscanf( const char , const char , …);

int sscanf(const char *buffer,const char *format,[argument ]…);

buffer儲存的資料

format格式控制字串

argument選擇性設定字串

sscanf會從buffer裡讀進資料,依照format的格式將資料寫入到argument裡

2、標頭檔案

#include

or #include

3、返回值

成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。

經多次測試[**請求],在linux系統中成功返回的是成功轉換的值的個數,例如:

sscanf(「1 2 3」,」%d %d %d」,buf1, buf2, buf3); 成功呼叫返回值為3,即buf1,buf2,buf3均成功轉換。

sscanf(「1 2」,」%d %d %d」,buf1, buf2, buf3); 成功呼叫返回值為2,即只有buf1,buf2成功轉換。

(注意:此處buf均為位址)

4、說明:

sscanf與scanf類似,都是用於輸入的,只是後者以鍵盤(stdin)為輸入源,前者以固定字串為輸入源。

第二個引數可以是乙個或多個 ]type | 』 』 | 『\t』 | 『\n』 | 非%符號}

注: 1>、亦可用於格式中, (即 %*d 和 %*s) 加了星號 () 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)

2>、表示a,b,c中選一,[d]表示可以有d也可以沒有d。

3>、width表示讀取寬度。

4>、:引數的size,通常h表示單位元組size,i表示2位元組size,l表示4位元組size(double例外),l64表示8位元組size。

5>、type :這就很多了,就是%s,%d之類。

6>、特別的:%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值

失敗返回0,否則返回格式化的引數個數

5、支援集合操作

%[a-z] 表示匹配a到z中任意字元,貪婪性(盡可能多的匹配)

%[ab』] 匹配a、b、』中一員,貪婪性

%[^a] 匹配非a的任意字元,並且停止讀入,貪婪性 c語言函式sscanf()的用法

例子 例子

1. 常見用法。

char buf[512];

sscanf(「123456」,」%s」,buf); //此處buf是陣列名,它的意思是將123456以%s的形式存入buf中!

printf(「%s\n」,buf);

結果為:123456

取指定長度的字串。如在下例中,取最大長度為4位元組的字串。

sscanf(「123456」,」%4s」,buf);

printf(「%s\n」,buf);

結果為:1234

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

sscanf(「123456abcdedf」,」%[^a-z]」,buf);

printf(「%s\n」,buf);

結果為:123456

取僅包含指定字符集的字串。如在下例中,取僅包含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的字元時,即遇到小寫字母時,就已經結束。)

取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。

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。

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、將輸入的合法字串轉換為浮點數

double buf;

sscanf(「-123.154」,」%lf」,&buf);

printf(「%.4lf\n」,buf);

二、ssprintf()函式

srpintf()函式的功能非常強大:效率比一些字串操作函式要高;而且更具靈活性;可以將想要的結果輸出到指定的字串中,也可作為緩衝區,而printf只能輸出到命令列上~

1、標頭檔案:

#include
2、函式功能:

格式化字串,將格式化的資料寫入字串中

3、函式原型:

int sprintf(char *buffer, const char *format, [argument]…)

4、引數:

(1)buffer:是char型別的指標,指向寫入的字串指標;

(2)format:格式化字串,即在程式中想要的格式;

(3)argument:可選引數,可以為任意型別的資料;

5、函式返回值:

buffer指向的字串的長度

6、用處

(1)格式化數字字串:在這點上sprintf和printf的用法一樣,只是列印到的位置不同而已,前者列印給buffer字串,後者列印給標準輸出,所以sprintf也可以用來將整型轉化為字串,比itoa效率高且如此地簡便~比如:sprintf(buffer, 「%d」, 123456);執行後buffer即指向字串「123456」~

(2)連線字元:

(a)連線以』\0』結束的字串

#include

int main()

(b)連線結尾沒有』\0』的字元陣列或字串緩衝區:

#include

int main()

; char b = ;

char buffer[10];

sprintf(buffer, "%.4s%.4s", a, b);

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

return

0;

}

7、sprintf()最常見的應用之一莫過於把整數列印到字串中,如:

sprintf(s, 「%d」, 123); //把整數123列印成乙個字串儲存在s中

sprintf(s, 「%8x」, 4567); //小寫16進製制,寬度佔8個位置,右對齊

sprintf()會根據引數format 字串來轉換並格式化資料,然後將結果複製到引數str 所指的字串陣列,直到出現字串結束(『\0』)為止。關於引數format 字串的格式請參考printf()。

#include

#include

using

namespace

std;

int main()

sscanf與sprint函式的用法

printf 語法 include int printf const char format,printf 函式根據format 格式 給出的格式列印輸出到 stdout 標準輸出 和其它引數中。返回值是輸出的字元數量。sprintf 語法 include int sprintf char buff...

sscanf 函式與 sprintf 函式對比用例

sprintf函式 sprintf函式原型為 int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進製制和8進製字串。3 連線多個字串。char str 256 int data 1024 ...

C語言sprintf與sscanf函式

原文 1 前言 2 sprintf函式 sprintf函式原型為int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進製制和8進製字串。3 連線多個字串。3 sscanf函式 sscanf函...