double d = 3.3;
char str[50];
sprintf(str, " \t%f", d);
USBD_VCOM_SendString(str);
想把我的μController中的双精度发送到我的电脑,但是str总是接缝为空。用int也尝试过,它工作正常。也不适用于浮动。 我正在使用ARM-GCC C编译器。
答案 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);