因為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...