欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
C語言sprintf函數問題
[打印本頁]
作者:
依然是你
時間:
2019-2-22 14:56
標題:
C語言sprintf函數問題
QQ圖片20190222145334.png
(8 KB, 下載次數: 91)
下載附件
2019-2-22 14:56 上傳
如圖 第一個可以正常運行
第二個 浮點型程序卡這不運行了
求大神指點
作者:
龍的傳人@@
時間:
2019-2-22 17:49
可能是浮點數類型轉換成整形時,缺少小數部分
作者:
奧斯特洛夫斯基
時間:
2019-2-22 20:05
我印象中好像不能這樣寫的,sprintf(str,"%d",sw);這里的str代表的是str[80]的首地址,兩個不同數據類型的數據數組str的首地址開始存儲,這樣寫好像會引起段錯誤的,最好另外定義多一個數組;還有就是你第一個最好強制類型轉換一下,
作者:
static
時間:
2019-2-22 22:07
C語言很基礎的知識
作者:
dadaguai11
時間:
2019-2-23 15:09
要么在第一個sprintf之后清空str里的內容,要么就再定義一個字符串來存儲。不然第一個都沒有意義。
還有,什么叫程序卡在這了。。。。
作者:
xuyaqi
時間:
2019-2-23 15:17
要用 (float) 強制轉換一下。
作者:
水無痕
時間:
2019-2-23 23:17
sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,sprintf的第一個參數應該是目的字符串,如果不指定這個參數,執行過程中出現 "該程序產生非法操作,即將被關閉...."的提示。 因為C語言在進行字符串操作時不檢查字符串的空間是否夠大,所以可能會出現數組越界而導致程序崩潰的問題。即使碰巧,程序沒有出錯,也不要這么用,因為早晚會出錯。所以一定要在調用sprintf之前分配足夠大的空間給buf。int i = 100; sprintf(s, "%.2f", i); 會打出什么東東來?“100.00”?對嗎?自己試試就知道了,第一個打出來的肯定不是正確結果,原因跟前面提到的一樣,參數壓棧時調用者并不知道跟i 相對應的格式控制符是個”%f”。而函數執行時函數本身則并不知道當年被壓入棧里的是個整數, 于是可憐的保存整數i 的那4 個字節就被不由分說地強行作為浮點數格式來解釋了,整個亂套了。試試 sprintf(s, "%.2f", (double)i);
作者:
水無痕
時間:
2019-2-23 23:19
sprintf的作用是將一個格式化的字符串輸出到一個目的字符串中,而printf是將一個格式化的字符串輸出到屏幕。sprintf的第一個參數應該是目的字符串,如果不指定這個參數,執行過程中出現 "該程序產生非法操作,即將被關閉...."的提示。
因為C語言在進行字符串操作時不檢查字符串的空間是否夠大,所以可能會出現數組越界而導致程序崩潰的問題。即使碰巧,程序沒有出錯,也不要這么用,因為早晚會出錯。所以一定要在調用sprintf之前分配足夠大的空間給buf。
int i = 100;
sprintf(s, "%.2f", i);
會打出什么東東來?“100.00”?對嗎?自己試試就知道了
第一個打出來的肯定不是正確結果,原因跟前面提到的一樣,參數壓棧時調用者并不知道跟i
相對應的格式控制符是個”%f”。而函數執行時函數本身則并不知道當年被壓入棧里的是個整數,
于是可憐的保存整數i 的那4 個字節就被不由分說地強行作為浮點數格式來解釋了,整個亂套了。
試試下面這個:
sprintf(s, "%.2f", (double)i);
作者:
Ahchi
時間:
2019-2-24 01:24
就是壓棧位數的問題,默認當int兩個字節,float是4個字節的。
默認位數跟編譯器關系很大,c51,gcc,vc都不一樣。
C51的double和float都是4字節的,別的地方可不一樣,要小心。
感覺換成sprintf(s, "%.2f", (float)i);在更多的平臺上通用
作者:
Iceland97
時間:
2019-2-25 19:29
應該強制轉換一下類型,自動補齊小數點后面的。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1