将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用
Posted
技术标签:
【中文标题】将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用【英文标题】:convert a number in a string to float in c: atof(), strtof() do not work 【发布时间】:2015-12-09 20:09:13 【问题描述】:我的 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,则没有区别。在某些情况下,输出会发生变化,但这仍然是无稽之谈。
谢谢, 彼得
【问题讨论】:
Convert string to float in Objective-C的可能重复 您是否禁用了警告或什么?strtof()
的原型看起来与你想象的完全不同。
【参考方案1】:
您还没有包含<stdlib.h>
以获得strtof()
的原型。所以返回类型默认为int。但自 C99 以来,隐式 int 规则已从 C 中删除。
用法也是错误的。至少应该是:
char *eptr;
x = strtof(a, &eptr);
并检查 eptr
是否有转换失败。
编译时启用警告。 GCC 警告:
警告:函数‘strtof’的隐式声明 [-Wimplicit-function-declaration]
【讨论】:
好的,谢谢。我没有禁用警告,也没有收到警告,但这显然是问题所在。包括 stdlib.h,并在 strtof() 中添加第二个参数“NULL”,一起修复它。但是,我认为 strcpy() 的用法实际上是正确的; argv[1] 已经是一个指针。 糟糕,您的意思是使用 strtof(),而不是 strcpy()。是的,你是对的,我对 strtof() 的使用不正确(叹气)。以上是关于将字符串中的数字转换为 c 中的浮点数:atof()、strtof() 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
C语言atof()函数:将字符串转换为double(双精度浮点数)
C语言atof()函数:将字符串转换为double(双精度浮点数)