C 使用atof转换的值的Printf
我正试图为我的SAM3S微控制器建立一个项目。我正在使用atof函数将通过UART传递给micro的字符串转换为浮点,但当我想看到转换结果(通过printf)时,打印的值仅为“f”C 使用atof转换的值的Printf,c,floating-point,printf,atof,strtod,C,Floating Point,Printf,Atof,Strtod,我正试图为我的SAM3S微控制器建立一个项目。我正在使用atof函数将通过UART传递给micro的字符串转换为浮点,但当我想看到转换结果(通过printf)时,打印的值仅为“f” #包括 #包括 int main(){ char-str[7]; 浮点数; //通过UART接收字符串并将其保存在str中 编号=atof(str); printf(“收到的:%s已转换为:%lf”,str,编号); } 操作的结果是:“收到10.000转换为:f”。我还尝试了strtod(str,NULL) 即使
#包括
#包括
int main(){
char-str[7];
浮点数;
//通过UART接收字符串并将其保存在str中
编号=atof(str);
printf(“收到的:%s已转换为:%lf”,str,编号);
}
操作的结果是:“收到10.000转换为:f”。我还尝试了strtod(str,NULL)代码>
即使是sscanf也无可救药,但其价值保持不变。每个用“数字”生成的微积分在打印时都会返回“f”。
我认为错误在于转换。你有什么建议吗?
谢谢您的微控制器的printf
支持浮点吗?它通常被排除在外。@JohnH:在printf()
中,%lf
和%f
都使用双精度作为参数。如果将一个float
传递给varargs函数(如printf),它将被提升为double
。尝试构建一个简单的程序,如float number=atof(“10.000”)
并直接读取调试器中的内存。如何确保字符串str
以null结尾
。终止符是通过UART发送的还是在收到时发生的?在调用atof
之前,您能测试str
吗?%lf
导致C89中的未定义行为;也许你用的是旧的编译器?尝试使用%f
。
#include <stdlib.h>
#include <stdio.h>
int main(){
char str[7];
float number;
//receives the string of characters through UART and saves it in str
number=atof(str);
printf("received: %s converted in: %lf",str,number);
}