无法将float或double转换为char数组(sprintf)

时间:2016-07-28 12:33:22

标签: c printf

double d = 3.3;
char str[50];
sprintf(str, " \t%f", d);
USBD_VCOM_SendString(str);

想把我的μController中的双精度发送到我的电脑,但是str总是接缝为空。用int也尝试过,它工作正常。也不适用于浮动。 我正在使用ARM-GCC C编译器。

1 个答案:

答案 0 :(得分: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);