将字符串中的数字转换为浮点数c:atof(),strtof()不起作用

时间:2015-12-09 20:09:14

标签: c

我的C生锈了。我试图将字符串转换为float(或double)。我尝试过atof()和strtof(),并尝试按照herehere的说明操作。没有运气。

这是我的代码:

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

int main(int argc, char *argv[]) {
  float x;
  char a[20];
  strcpy(a,argv[1]);
  x = strtof(a);
  printf("%s\n",a);
  printf("%f\n",x);
  return 0;
}

没有运气。这是命令行的输出:

prompt$ ./a.out 2.34
2.34
1426063.000000
prompt$

如果我改用atoi(),我得到0.0。

显然我有一些简单的遗漏。这是关于ubuntu fwiw的gcc 4.8.4。

如果我使用-static标志编译,或使用double而不是float(和%e而不是%f),或者包含math.h,则没有区别。在某些情况下,输出会发生变化,但这仍然是无稽之谈。

谢谢, 彼得

1 个答案:

答案 0 :(得分:4)

您尚未包含<stdlib.h>来获取strtof()的原型。因此返回类型默认为int。但是自C99以来,隐式int规则已从C中删除。

用法也是错误的。它至少应该是:

char *eptr;

x = strtof(a, &eptr);

检查eptr转换失败。

编译并启用警告。海湾合作委员会警告说:

  

警告:隐式声明函数'strtof'   [-Wimplicit函数声明]