久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4422|回復: 9
打印 上一主題 下一主題
收起左側

C語言sprintf函數問題

[復制鏈接]
跳轉到指定樓層
樓主
50黑幣


如圖  第一個可以正常運行

第二個  浮點型程序卡這不運行了

求大神指點

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:306945 發表于 2019-2-22 17:49 | 只看該作者
可能是浮點數類型轉換成整形時,缺少小數部分

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:105804 發表于 2019-2-22 20:05 | 只看該作者
我印象中好像不能這樣寫的,sprintf(str,"%d",sw);這里的str代表的是str[80]的首地址,兩個不同數據類型的數據數組str的首地址開始存儲,這樣寫好像會引起段錯誤的,最好另外定義多一個數組;還有就是你第一個最好強制類型轉換一下,

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:477932 發表于 2019-2-22 22:07 | 只看該作者
C語言很基礎的知識

評分

參與人數 1黑幣 +10 收起 理由
嘉立創AAA + 10

查看全部評分

回復

使用道具 舉報

5#
ID:461179 發表于 2019-2-23 15:09 | 只看該作者
要么在第一個sprintf之后清空str里的內容,要么就再定義一個字符串來存儲。不然第一個都沒有意義。
還有,什么叫程序卡在這了。。。。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

6#
ID:94031 發表于 2019-2-23 15:17 | 只看該作者
要用 (float) 強制轉換一下。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:479827 發表于 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);
回復

使用道具 舉報

8#
ID:479827 發表于 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);

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

9#
ID:479009 發表于 2019-2-24 01:24 | 只看該作者
就是壓棧位數的問題,默認當int兩個字節,float是4個字節的。
默認位數跟編譯器關系很大,c51,gcc,vc都不一樣。
C51的double和float都是4字節的,別的地方可不一樣,要小心。
感覺換成sprintf(s, "%.2f", (float)i);在更多的平臺上通用
回復

使用道具 舉報

10#
ID:480566 發表于 2019-2-25 19:29 | 只看該作者
應該強制轉換一下類型,自動補齊小數點后面的。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 18性欧美 | 狠狠干综合视频 | re久久| 一区二区三区在线看 | 欧美精品综合在线 | 亚洲欧美日韩精品久久亚洲区 | 成人av一区二区三区 | 国产成人99久久亚洲综合精品 | 成人国产在线视频 | 插插宗合网 | 亚洲一区二区在线视频 | 欧美成人激情 | 国产 欧美 日韩 一区 | 一区二区三区视频在线观看 | 亚洲精品一区二三区不卡 | 国产精品高潮呻吟久久av黑人 | 欧美视频区 | 午夜精品一区二区三区在线 | 精品一区二区三区在线观看 | 国产在线97 | 极品销魂美女一区二区 | 中文字幕精品一区 | 北条麻妃av一区二区三区 | 成人精品鲁一区一区二区 | 国产成在线观看免费视频 | 91久久国产综合久久 | 亚洲国产成人久久综合一区,久久久国产99 | 国产精品一区二区在线 | 欧美激情精品久久久久久 | 日韩在线免费 | 一区二区三区在线 | 一区视频在线免费观看 | 波多野结衣中文字幕一区二区三区 | 色av一区二区 | 欧美人妇做爰xxxⅹ性高电影 | 国产视频第一页 | 欧美日韩黄 | 久久久久国产精品一区二区 | 久久美国 | 欧美99久久精品乱码影视 | 在线播放国产一区二区三区 |