sprintf和snprintf的區別

2021-10-05 04:18:48 字數 604 閱讀 1587

因為sprintf可能導致緩衝區溢位問題而不被推薦使用,優先選擇使用snprintf函式,雖然會稍微麻煩那麼一點點。這裡就是sprintf和snprintf最主要的區別:snprintf通過提供緩衝區的可用大小傳入引數來保證緩衝區的不溢位,如果超出緩衝區大小則進行截斷。但是對於snprintf函式,還有一些細微的差別需要注意。

sprintf函式返回的是實際輸出到字串緩衝中的字元個數,包括null結束符。而snprintf函式返回的是應該輸出到字串緩衝的字元個數,所以snprintf的返回值可能大於給定的可用緩衝大小以及最終得到的字串長度。

char tlist_3[10] = ;

int len_3 = 0;

len_3 = snprintf(tlist_3,10,"this is a overflow test!\n");

printf("len_3 = %d,tlist_3 = %s\n",len_3,tlist_3);

上述**段的輸出結果如下:

len_3 = 25,tlist_3 = this is a
所以在使用snprintf函式的返回值時,需要小心慎重,避免人為造成的緩衝區溢位。

sprintf 函式和strchr 函式

可以用sprintf 函式把資訊輸出到字串,用法和printf fprintf類似,但應保證字串足夠大。strchr 函式 查詢字串s中首次出現字元c的位置,成功則返回要查詢字元第一次出現的位置,失敗返回null include include include include include inc...

sscanf 和 sprintf的用法

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

snprintf和sprintf區別分析

今天在專案中使用snprintf時遇到乙個比較迷惑的問題,追根溯源了一下,在此對sprintf和snprintf進行一下對比分析。因為sprintf可能導致緩衝區溢位問題而不被推薦使用,所以在專案中我一直優先選擇使用snprintf函式,雖然會稍微麻煩那麼一點點。這裡就是sprintf和snprin...