C++中sprintf實現將一個基本資料型別的陣列轉換成字串
阿新 • • 發佈:2019-02-15
今天上班的時候為了將一組資料用一條日誌打印出來,於是用sprintf函式迴圈的將一個浮點型的陣列轉換成字串存放到一個日誌字串結尾。
char loginfo[255] = 0; sprintf(loginfo, "All the Fuel Level is %4.2f", m_eFuelLevelSet[0]); for (int i = 1; i < len; i++) { sprintf(<span style="color:#ff0000;">loginfo</span> + len, "%s, %4.2f", <span style="color:#ff0000;">loginfo</span>, m_eFuelLevelSet[i]); }
結果發現有些時候打出來的日誌是空的,到網上查了一下資料,原來是記憶體重疊的問題。有一定機率會出問題,所以以後最好不要這要用。其實用strcat可以實現上面的問題,不用擔心記憶體重疊,但總是感覺多了好幾行程式碼,感覺不好看,於是查了sprintf的原函式,瞭解了一些相關引數。發現仍然可以用sprintf來解決陣列轉換成字串。
值得注意的是,必須保證sprintf的第一個引數必須保證足夠大的空間,否則出現記憶體越界,產生很嚴重的後果。char loginfo[255] = {0}; int len = sprintf(loginfo, "All the Fuel Level is %4.2f", m_eFuelLevelSet[0]); for (int i = 1; i < len; i++) { len += sprintf(loginfo + len, ", %4.2f", m_eFuelLevelSet[i]); }