sprintf函式的使用

2021-06-19 15:42:16 字數 1843 閱讀 2959

把格式化的資料寫入某個字串

緩衝區。

stdio.h

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

buffer:char型指標,指向將要寫入的字串的緩衝區。

format:格式化字串。

[argument]...:可選引數,可以是任何型別的資料。

返回值:字串長度(strlen) 1

/*例子*/1 2

3456

78910

11#include //某個標頭檔案

intmain ()/*主函式「整數」型別*/

輸出結果:

[5 plus 3 is 8] is a string 13 chars long

sprintf格式的規格如下所示。中的部分是可選的。

%[指定引數][識別符號][寬度][.精度]指示符

若想輸出'%'本身時, 請使用'%%'處理。

1. 處理字元方向。負號時表示從後向前處理。

2. 填空字元。 0 的話表示空格填 0;空格是內定值,表示空格就放著。

3. 字元總寬度。為最小寬度。

4. 精確度。指在小數點後的浮點數字數。

sprintf 是個變參函式,使用時經常出問題,而且只要出問題通常就是能導致程式崩潰的記憶體訪問錯誤,但好在由sprintf 誤用導致的問題雖然嚴重,卻很容易找出,無非就是那麼幾種情況,通常用眼睛再把出錯的**多看幾眼就看出來了。

sprintf_s()是sprintf()的安全版本,通過指定緩衝區長度來避免sprintf()存在的溢位風險 。在使用vs2008時如果你使用了sprintf函式,那麼編譯器會發出警告:使用sprintf存在風險,建議使用sprintf_s。這個安全版本的原型是:

int sprintf_s(char *buffer,size_t sizeofbuffer,const char *format [,argument] ... );

緩衝區溢位

第乙個引數的長度太短了,沒的說,給個大點的地方吧。當然也可能是後面的引數的問題,建議變參對應一定要細心,而列印字串時,盡量使用」%.ns」的形式指定最大字元數。

忘記了第乙個引數

低階得不能再低階問題,用printf 用得太慣了。//偶就常犯。:。(

變參對應出問題

通常是忘記了提供對應某個格式符的變參,導致以後的引數統統錯位,檢查檢查吧。尤其是對應」*」的那些引數,都提供了嗎?不要把乙個整數對應乙個」%s」,編譯器會覺得你欺她太甚了(編譯器是obj 和exe 的媽媽,應該是個女的,:p)。

strftime

sprnitf 還有個不錯的表妹:strftime,專門用於格式化時間字串的,用法跟她表哥很像,也是一大堆格式控制符,只是畢竟小姑娘家心細,她還要呼叫者指定緩衝區的最大長度,可能是為了在出現問題時可以推卸責任吧。這裡舉個例子:

time_t t = time(0);

//產生"yyyy-mm-dd hh:mm:ss"格式的字串。

char s[32];

strftime(s, sizeof(s), "%y-%m-%d %h:%m:%s", localtime(&t));

sprintf 在mfc 中也能找到他的知音:cstring::format,strftime 在mfc 中自然也有她的同道:ctime::format,這一對由於從物件導向那裡得到了贊助,用以寫出的**更覺優雅。

sprintf函式的使用

可將不同型別的資料以特定的表現形式轉換成字元陣列。標頭檔案為 stdio.h 函式原型 int sprintf char buffer,const char format,argument 用處 1 格式化數字字串 如 sprintf buffer,d 123456 則buffer即為 123456...

sprintf 函式使用

c 庫函式 int sprintf char str,const char format,傳送格式化輸出到 str 所指向的字串。int sprintf char str,const char format,例 把整數變為字串 include intmain 應用 判斷乙個整數中某一位是否含有的某乙...

sprintf 函式使用異常

除錯stm32f103,比如如下 使用springf函式,這個函式是把最後兩個引數先格式化成字串 輸出到error string,如果他們合併的長度大於30會出現深情況?char error string 30 sprintf error string,n r ok s s r n r n pope...