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