程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 使用sprintf打印float並控制小數位數時引起的相關問題

使用sprintf打印float並控制小數位數時引起的相關問題

編輯:關於C語言

最近在做項目中發現一個Bug,直接把進程搞死,查了一下,居然是一個最不起眼的地方導致的,在此記錄一下。

先看下面代碼

#include <iostream>
#include <stdio.h>

using namespace std;


int main()
{
    char aa[1024] = {0};
    float f = 50.123456;

    // 本意是想把一個浮點數輸出到字符串中,小數位為兩位,漏了
    sprintf(aa, "%0.*f", f);
    printf("%f\n", f);
    cout<<aa<<endl;

    sprintf(aa, "%0.*f", 2, f);
    cout<<aa<<endl;

    cout << "Hello world!" << endl;

    return 0;
}

 

運行結果如下

 

代碼中,sprintf(aa, "%0.*f", f);是想把一個浮點數輸出到字符串中,且想控制小數點後的位數,但是在後面沒有傳參數指定小數點位數,導致sprintf打印了一長串數據到變量aa中。當aa的空間不足時,就會使得數組越界,導致程序崩潰。在項目中進程被搞死的原因就在於此。至於sprintf函數內部是怎麼打印出這麼長一串數據的,等看了源碼後再分析。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved