为什么strtof不打印正确的浮动?

时间:2015-04-22 04:40:29

标签: c floating-point-conversion

#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;
}

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

codepad有一个旧版本的gcc,可能是标准的C库。显然,您包含的头文件未声明strtof。 (C99中添加了strtof。)

尝试使用postdiluvian版本的gcc在线服务。或者明确添加正确的声明:

float strtof(const char* ptr, char** end_ptr);

发生的事情是,如果没有声明,编译器会将函数的返回类型默认为int。由于函数实际返回一个浮点数,浮点数被解释为(不转换为)一个整数,然后该整数转换为浮点数。

不会产生警告,大概是因为-Wall不在编译器选项中,和/或正在使用的C标准允许使用未声明的函数。