項目中一個不起眼的 sprintf 調用導致進程崩潰:
char aa[1024] = {0};
float f = 50.123456;
sprintf(aa, "%0.*f", f); // 缺少精度參數!
%.*f 格式要求兩個參數:第一個是精度(int),第二個是浮點數。代碼中僅傳入 f,導致 sprintf 從棧上讀取垃圾值作為精度,輸出超長字符串,最終寫入超出 aa 緩衝區範圍,觸發緩衝區溢出。
sprintf(aa, "%0.*f", 2, f); // 明確指定保留 2 位小數

錯誤調用輸出極長數字串;正確調用輸出 50.12。
-Wformat)與靜態分析工具檢查。snprintf 限制寫入長度。