用snprintf代替sprintf吧

sprintf最常用的功能莫過(guò)于將int,float等類(lèi)型數(shù)據(jù)打印到char數(shù)組中去。但是使用sprintf常常會(huì)由于疏忽產(chǎn)生緩沖區(qū)溢出的問(wèn)題,導(dǎo)致不可知的錯(cuò)誤。
snprintf是sprintf的安全版本,其函數(shù)原型為

int _snprintf(char *buffer, size_t count, const char *format [,argument] ... );

其第二個(gè)參數(shù)可以指定轉(zhuǎn)換后字符串在緩沖區(qū)中的長(zhǎng)度,確保不發(fā)生溢出。

當(dāng)然,有一個(gè)問(wèn)題需要注意,指定的轉(zhuǎn)換長(zhǎng)度是包含結(jié)束符"\0"的字節(jié)數(shù),例如,

float a = 1.23;
char buf[10];
snprintf(buf,4,"%f",a);
cout << buf;

得到1.2,而要完整的轉(zhuǎn)換a,則需要指定轉(zhuǎn)換長(zhǎng)度為5,

float a = 1.23;
char buf[10];
snprintf(buf,5,"%f",a);
cout << buf;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、基礎(chǔ)知識(shí):1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,553評(píng)論 0 4
  • 看到低矮地房子會(huì)想到你 看到黑黢黢的柵欄會(huì)想到你 看到那大片的樹(shù)林和翠綠的葉子會(huì)想到你 看到那長(zhǎng)有寬大葉子的生長(zhǎng)期...
    疤_閱讀 336評(píng)論 0 0
  • 清早 我光著腳丫 走在這片油菜花地里 前方的路仿佛沒(méi)有盡頭 小小的我淹沒(méi)在這片油菜地里 那時(shí)的日子好像那么長(zhǎng) 我們...
    雪鯨呀閱讀 1,452評(píng)論 1 4
  • 小生 第一天跟小生同桌,沒(méi)有好意思打招呼。因?yàn)槲以谛∩南蚪M織揩油的小組群里幾乎沒(méi)有發(fā)言。感覺(jué)有點(diǎn)對(duì)不住小生。主動(dòng)...
    加一的修煉場(chǎng)閱讀 989評(píng)論 2 2

友情鏈接更多精彩內(nèi)容