将字符串中的数字转换为c中的浮点:atof(),strof()不起作用
我的C生锈了。我正在尝试将字符串转换为float(或double)。我已经尝试了atof()和strtof(),并尝试了遵循说明和。不走运 这是我的密码:将字符串中的数字转换为c中的浮点:atof(),strof()不起作用,c,C,我的C生锈了。我正在尝试将字符串转换为float(或double)。我已经尝试了atof()和strtof(),并尝试了遵循说明和。不走运 这是我的密码: #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);
#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;
}
如果改用atoi(),则得到0.0
很明显,我遗漏了一些简单的东西。这是ubuntu fwiw上的GCC4.8.4
如果我使用-static标志编译,或者使用double而不是float(使用%e而不是%f),或者包含math.h,都没有区别。在某些情况下,输出会发生变化,但这仍然是胡说八道
谢谢,
Peter您还没有将
包含在获取的原型中。因此,返回类型默认为int。但隐式int规则自C99以来已从C中删除
用法也是错误的。它至少应该是:
char *eptr;
x = strtof(a, &eptr);
并检查eptr
是否存在转换故障
在启用警告的情况下编译。GCC警告:
警告:函数“strtof”的隐式声明
[-Wimplicit函数声明]
您还没有包括
以获取的原型。因此,返回类型默认为int。但隐式int规则自C99以来已从C中删除
用法也是错误的。它至少应该是:
char *eptr;
x = strtof(a, &eptr);
并检查eptr
是否存在转换故障
在启用警告的情况下编译。GCC警告:
警告:函数“strtof”的隐式声明
[-Wimplicit函数声明]
您是否禁用了警告或其他功能?
strof()
的原型看起来与您想象中的大不相同。是否禁用了警告或什么?strof()
的原型看起来与您想象的大不相同。好的,谢谢。我没有禁用警告,也没有收到警告,但这显然是问题所在。包括stdlib.h,并将第二个参数“NULL”添加到strtof(),一起修复了它。然而,我认为strcpy()的用法实际上是正确的;argv[1]已经是指针。Ooops,您指的是strof()的用法,而不是strcpy()。是的,你是对的,我对strof()的用法不正确(叹气)。好的,谢谢。我没有禁用警告,也没有收到警告,但这显然是问题所在。包括stdlib.h,并将第二个参数“NULL”添加到strtof(),一起修复了它。然而,我认为strcpy()的用法实际上是正确的;argv[1]已经是指针。Ooops,您指的是strof()的用法,而不是strcpy()。是的,你是对的,我对strtof()的用法不正确(叹气)。