[轉]用 snprintf / asprintf 取代不安全的 sprintf

在 C 語言裡,要建立一個字元陣列的字串,常常會使用 sprintf() 這個函數來做格式化的處理。但是實際上,這個函式卻不是那麼「安全」。怎麼說呢?sprintf() 的整個介面長的樣子的是:

也就是在使用前,必須要先建立好一個字元陣列的空間,再用這個函式把內容填入,下面就是簡單的例子:

int tmp = 10;
char cstr[20];
sprintf( cstr, "%d * %d = %d", tmp, tmp, tmp * tmp );
改用snprintf避免buffer overflow
int tmp = 10000;
char cstr[20];
snprintf( cstr, sizeof( cstr ), "%d * %d = %d", tmp, tmp, tmp * tmp );
回傳值
  • 正常狀況會回傳 len
  • 如果有錯誤,回傳負值(-1)
原文地址:https://www.cnblogs.com/bittorrent/p/2834914.html