printf linux 头文件,Linux C 格式化输出时要注意的问题
在Linux下提供了以下函數(shù)提供格式化輸出,printf,fprintf,sprintf,snprintf。這些函數(shù)的頭文件定義都是stdio.h。為標(biāo)準(zhǔn)的C庫(kù)函數(shù)。
printf提供標(biāo)準(zhǔn)的輸出流,fprintf往特定的流中寫(xiě)數(shù)據(jù)。前者比較常見(jiàn),用的也較多。
sprintf格式化輸入到字符指針緩沖,這個(gè)函數(shù)自動(dòng)的加入null byte到緩沖,但是返回值不包括這個(gè)結(jié)束字節(jié)。
使用sprintf函數(shù)意緩沖溢出問(wèn)題,用戶要保證格式化數(shù)據(jù)的長(zhǎng)度。
如下代碼:
#include
int main(int argc,char *argv[])
{
char buffer[6];
sprintf(buffer,"%d",123456789);
printf("%s\n",buffer);
return 0;
}
gcc version 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)
下輸出:123456789
buffer緩沖區(qū),只有6個(gè)字節(jié)的長(zhǎng)度,但是輸出的數(shù)據(jù)卻有9個(gè)字節(jié),這個(gè)結(jié)果在一些情況下是不確定的,可能造成系統(tǒng)崩潰。
這個(gè)問(wèn)題,在網(wǎng)絡(luò)編程中,尤其要注意。接受客戶端提交的數(shù)據(jù),我們?nèi)绻眠@個(gè)函數(shù)來(lái)格式化,由于客戶端的輸入是不確定的,這對(duì)系統(tǒng)存在潛在的危險(xiǎn)。如果,有提交的數(shù)據(jù)超過(guò)緩沖,可能造成系統(tǒng)出錯(cuò)。這就是緩沖區(qū)攻擊的原理。
針對(duì)以上的問(wèn)題,有個(gè)替代的函數(shù)snprintf。n表示格式化的長(zhǎng)度。
以下代碼:
#include
intmain(intargc,char*argv[])
{
charbuffer[6];
sprintf(buffer,"%d",123456789);
printf("%s\n",buffer);
return0;
}
總結(jié)
以上是生活随笔為你收集整理的printf linux 头文件,Linux C 格式化输出时要注意的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux中断与进程切换,结合中断上下文
- 下一篇: linux用avk怎么提取字符,在Lin