C 使用atof转换的值的Printf

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) 即使

我正试图为我的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)
即使是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);
    }