2016-07-28 69 views
-1
double d = 3.3; 
char str[50]; 
sprintf(str, " \t%f", d); 
USBD_VCOM_SendString(str); 

希望從我的μController發送到我的計算機,但str總是接縫爲空。用int也試過,它工作正常。也不適用於浮動。 我正在使用ARM-GCC C編譯器。不能將float或double轉換爲字符數組(sprintf)

+0

看起來好像在CRT中沒有實現浮點數格式化。 –

+0

謝謝。這聽起來像是一個大問題。任何其他方式來將浮點數或double轉換爲char數組? – Shilence

+0

我不完全確定,它只是_looks_如此。查看應該提供的CRT文檔和/或源代碼。 –

回答

0

3個需要解決的問題。

1)一些編譯器,即使使用浮點數指定符*printf(),做不包括包括FP支持,除非代碼在代碼的其他地方有FP數學。確保代碼在其他地方使用FP,或者編譯器沒有此限制。

2)使用不會溢出的緩衝區和*printf()說明符。 @Jonathan Leffler
"%e"而不是"%f"是避免過長字符串的簡單方法。 3)打印sufficient precision

#include <float.h> 
//  - d .  ddddddd    e - expo \0 spare 
char str[1 + 1 + 1 + (DBL_DECIMAL_DIG - 1) + 1 + 1 + 5 + 1 + 10]; 
snprintf(str, sizeof str, "%.*e", DBL_DECIMAL_DIG - 1, d); 

USBD_VCOM_SendString(str); 
相關問題