我的C生锈了。我正在尝试将字符串转换为浮点(或双精度)。我已经尝试了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,则没有区别。在某些情况下,输出会发生变化,但这仍然是无稽之谈。
谢谢,
彼得

最佳答案

你还没有包括<stdlib.h>来获得strtof()的原型。因此,返回类型默认为int。但是自C99以来,隐式int规则已从C中删除。
用法也不对。至少应该是:

char *eptr;

x = strtof(a, &eptr);

并检查eptr是否存在转换失败。
编译时启用警告。GCC警告:
警告:函数“strtof”的隐式声明
[-Wimplicit函数声明]

关于c - 将字符串中的数字转换为浮在c中:atof(),strtof()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34188066/

10-15 01:36