我的C生锈了。我正在尝试将字符串转换为浮点(或双精度)。我已经尝试了atof()和strtof(),并尝试了遵循here和here的说明。运气不好。
这是我的代码:
#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/