我的浮点数不能打印到C中的控制台,我不知道为什么。ints打印得很好,所以我搞不懂为什么浮点数是这样的。代码如下:
float temp = 9.5;
u8_t buf[strlen("temp (K): %.2f\n") + strlen(temp)];
sprintf(buf, "temp (K): %.2f\n", temp);
cli_output(buf);在cli_output中
void cli_output(u8_t buf[])
{
for (int i = 0; i < strlen(buf); i++)
{
uart_poll_out(comm_uart, buf[i]);
}
}我的输出:Fuel gauge temp (K):编辑:如果我有下面的代码,它会像预期的那样打印到控制台。
int temp = 9;
u8_t buf[strlen("temp (K): %d\n") + strlen(temp)];
sprintf(buf, "temp (K): %d\n", temp);
cli_output(buf);发布于 2020-07-21 03:29:03
抛开数组长度问题不谈,可能导致这种情况的原因是开发环境没有启用浮动printf支持。Eclipse在某些环境中为此提供了一个UI设置--我在Simplicity中见过它。或者,您可以手动添加链接器选项-u _printf_float

发布于 2020-07-18 07:11:38
strlen()用于测量字符串的长度,而不是整数或浮点数。
snprintf()函数返回要写入的字符串的长度,因此可以使用该长度进行分配。
另外,不要忘了为空字符的终止进行分配。
float temp = 9.5;
const char* message = "temp (K): %.2f\n";
int length = snprintf(NULL, 0, message, temp);
u8_t buf[length + 1];
sprintf(buf, message, temp);
cli_output(buf);https://stackoverflow.com/questions/62962821
复制相似问题