为什么strof不打印正确的浮点? #包括 #包括 #包括 int main(){ 字符aaa[35]=“1.25”; char*bbb=&(aaa[0]); 字符**ccc=&(bbb); 浮点数a=strtof(*ccc,ccc); printf(“%f\n”,a); 返回0; }

为什么strof不打印正确的浮点? #包括 #包括 #包括 int main(){ 字符aaa[35]=“1.25”; char*bbb=&(aaa[0]); 字符**ccc=&(bbb); 浮点数a=strtof(*ccc,ccc); printf(“%f\n”,a); 返回0; },c,floating-point-conversion,C,Floating Point Conversion,我上面写的代码应该打印1.25,但根据codepad(在线C编译器),它不会打印1.25。在代码板上,它打印2097152.000000。这是我的建议 我做错了什么?codepad有一个旧版本的gcc,大概是标准C库。显然,strof不是由您包含的头文件声明的。(strof已添加到C99中。) 尝试使用带有后稀释剂版本gcc的在线服务。或显式添加正确的声明: #include <stdio.h> #include <stdlib.h> #include <strin

我上面写的代码应该打印
1.25
,但根据codepad(在线C编译器),它不会打印
1.25
。在代码板上,它打印
2097152.000000
。这是我的建议


我做错了什么?

codepad有一个旧版本的gcc,大概是标准C库。显然,
strof
不是由您包含的头文件声明的。(
strof
已添加到C99中。)

尝试使用带有后稀释剂版本gcc的在线服务。或显式添加正确的声明:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
  char aaa[35] = "1.25";
  char* bbb = &(aaa[0]);
  char** ccc = &(bbb);
  float a = strtof(*ccc, ccc);
  printf("%f\n", a);
  return 0;
}
如果没有声明,编译器会将函数的返回类型默认为
int
。由于函数实际上返回一个浮点,所以浮点被解释为(未转换为)整数,然后该整数被转换为浮点


不会产生任何警告,可能是因为编译器选项中没有-Wall,和/或使用的C标准允许使用未声明的函数。

它会打印什么?当上面的代码被编译并运行时,我在ideone上没有打印1.25所以你得到了什么输出?你上面的代码板链接没有链接到编译器output@ArunA.S:是的。你认为我夸大了太多吗?已经八年了。
float strtof(const char* ptr, char** end_ptr);