sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,sprintf的第一個參數應該是目的字符串,如果不指定這個參數,執行過程中出現 "該程序產生非法操作,即將被關閉...."的提示。 因為C語言在進行字符串操作時不檢查字符串的空間是否夠大,所以可能會出現數組越界而導致程序崩潰的問題。即使碰巧,程序沒有出錯,也不要這么用,因為早晚會出錯。所以一定要在調用sprintf之前分配足夠大的空間給buf。int i = 100; sprintf(s, "%.2f", i); 會打出什么東東來?“100.00”?對嗎?自己試試就知道了,第一個打出來的肯定不是正確結果,原因跟前面提到的一樣,參數壓棧時調用者并不知道跟i 相對應的格式控制符是個”%f”。而函數執行時函數本身則并不知道當年被壓入棧里的是個整數, 于是可憐的保存整數i 的那4 個字節就被不由分說地強行作為浮點數格式來解釋了,整個亂套了。試試 sprintf(s, "%.2f", (double)i);
|