我的C生锈了。我试图将字符串转换为float(或double)。我尝试过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,则没有区别。在某些情况下,输出会发生变化,但这仍然是无稽之谈。
谢谢, 彼得
答案 0 :(得分:4)
您尚未包含<stdlib.h>
来获取strtof()
的原型。因此返回类型默认为int。但是自C99以来,隐式int规则已从C中删除。
用法也是错误的。它至少应该是:
char *eptr;
x = strtof(a, &eptr);
检查eptr
转换失败。
编译并启用警告。海湾合作委员会警告说:
警告:隐式声明函数'strtof' [-Wimplicit函数声明]