sscanf與sprint函式的用法

2021-08-02 11:25:01 字數 3753 閱讀 6007

printf

語法:

#include 

int printf( const char *format, ... );

printf()函式根據format(格式

)給出的格式列印輸出到

stdout(

標準輸出

)和其它引數中。返回值是輸出的字元數量。

sprintf

語法:

#include 

int sprintf( char *buffer, const char *format, ... );

sprintf()函式和printf()類似,格式控制完全一樣,只要是

printf

使用的格式化字串,在

sprintf

都可以使用,只是把輸出傳送到buffer(緩衝區

)中。返回值是寫入的字元數量。

功能一:格式化數字字串

sprintf(s, "%-8x", 

12345)

; //

s變成:「12345   」

大寫的「

x」代表,

16進製制

大寫形式

,寬度佔8 個位置,

「-」代表左對齊 。

功能二:

控制浮點數列印格式

浮點數使用格式符」%f」

控制,預設保留小數點後6 位數字

%m.nf」

格式,其中m 表示列印的寬度,n 表示小數點後的位數

sprintf(s, "%10.3f", 3.1415626); //

s變成:

" 3.142"

功能三:

連線兩個字串

直接連線:

char dest[256];

char src1 = ;

char src2 =;s

printf(dest,"%.5s%.4s",src1,src2);

//output:「

abcde1234

」擷取字串的某一些字元

進行連線,

char dest[256];

char src1 = ;

char src2 =;

sprintf(dest,"%.*s%.*s",2,src1,3,src2);

//output:「

ab123

功能四:

字元/ascii 碼對照

我們知道,

使用」%d」

或者」%x」

列印乙個字元,便能得出它的10 進製或16 進製的ascii 碼;反過來,使用

」%c」

列印乙個整數,便可以看到它所對應的ascii 字元。以下程式段把所有可見字元的ascii 碼對照表列印到螢幕上(這裡採用printf,注意

」#」與

」%x」

合用時自動為16 進製數增加

」0x」

字首):

for(int i = 32; i < 127; i++) 

功能五:

列印位址資訊

有時除錯程式時,我們可能想檢視某些變數或者成員的位址,由於位址或者指標也不過是個32 位的數,你完全可以使用列印無符號整數的

」%u」

把他們列印出來:

sprintf(s, "%u", &i);

sprintf(s, "%08x", &i);

然而,這些都是間接的方法,對於位址列印,sprintf 提供了專門的

」%p」

:sprintf(s, "%p", &i);

我覺得它實際上就相當於:

sprintf(s, "%0*x", 2 * sizeof(void *), &i);

功能六:利用返回值

printf與

sprintf

的返回值是寫入的字元數量。

也就是說每當一次sprinf 呼叫結束以後,你無須再呼叫一次strlen 便已經知道了結果字串的長度。如:

int len = sprintf(s, "%d", i);

scanf

語法:

#include 

int scanf( const char *format, ... );

scanf()函式根據由format(格式

)指定的格式從stdin(標準輸入)讀取

,並儲存資料到其它引數.

sscanf

語法:

#include 

int sscanf( const char *buffer, const char *format, ... );

函式sscanf()

和scanf()

類似, 

只是輸入從buffer(緩衝區

)中讀取

.sscanf與

scanf

類似,都是用於輸入的,只是後者以螢幕

(stdin)

為輸入源,前者以固定字串為輸入源

用法: %[ ]表示要讀入乙個字元集合

, 如果

[ 後面第乙個字元是

」^」,則表示反意思。

[ ]內的字串可以是

1或更多字元組成。空字符集(

%)是違反規定的,可導致不可預知的結果。

%[^]

也是違反規定的。

%[a-z] 讀取在 

a-z 

之間的字串,如果不在此之前則停止,如

char s="hello, my friend」 ; // 注意

: ,逗號在不 

a-z之間

sscanf( s, 「%[a-z]」, string ) ; // string=hello

%[^a-z] 讀取不在 

a-z 

之間的字串,如果碰到

a-z之間的字元則停止,如

char s="hellokitty」 ; // 注意

: ,逗號在不 

a-z之間

sscanf( s, 「%[^a-z]」, string ) ; // string=hello

%*[^=] 前面帶 

* 號表示不儲存變數。跳過符合條件的字串。

char s="notepad=1.0.0.1001" ;

char szfilename [32] = "" ;

int i = sscanf( s, "%*[^=]", szfilename ) ;// szfilename=null,

因為沒儲存

intj = sscanf( s, "%*[^=]=%s", szfilename ) ;// szfilename=1.0.0.1001

%40c 讀取

40個字元

%[^=] 讀取字串直到碰到

』=』號,

』^』後面可以帶更多字元,如:

char s="notepad=1.0.0.1001" ;

char szfilename [32] = "" ;

int i = sscanf( s, "%[^=]", szfilename ) ;// szfilename=notepad 

如果引數格式是:%[^=:] 

,那麼也可以從 

notepad:1.0.0.1001

讀取notepad

sscanf 函式與 sprintf 函式對比用例

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

sscanf 函式與 sprintf 函式對比用例

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

sscanf 函式與 sprintf 函式對比用例

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