这可能是什么问题?无论我为str选择什么号码,总是26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.00
char *str = "2.6";
printf("%f\n", strtof(str, (char**)NULL));
//prints 26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192.00
整个计划:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *str = "2.6";
printf("%f\n", strtof(str, NULL));
return 1;
}
使用-Wall编译:
test4.c:7: warning: implicit declaration of function âstrtofâ
答案 0 :(得分:8)
您为/ on构建了什么平台?你说的警告正在发出:
test4.c:7: warning: implicit declaration of function âstrtofâ
表示编译器不知道strtof()
返回浮点数,因此它会将int
推送到printf()
调用而不是double
。 strtof()
通常在stdlib.h
中声明,您将其包括在内。但它在C99之前不是标准函数,因此确切的编译器平台(以及您正在使用的配置/选项)可能会影响它是否可用。
答案 1 :(得分:4)
strtof
仅在C99中定义。可能是将选项-std=c99
传递给编译器会修复它,因为默认GCC(-std=gnu89
)仅包含几个C99功能。
另一个选择是使用C89-kosher strtod
。无论如何,从长远来看,这可能是更好的选择。 (除非在特殊情况下,你什么时候需要单打?)
答案 2 :(得分:3)
也许您忘记包含正确的标题?
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("%f\n", strtof("2.6", NULL));
return 0;
}
产生
2.600000
对我来说......
答案 3 :(得分:3)
鉴于您的警告,您应该尝试添加-std = c99以从标头中获取C99标准定义。默认情况下,它将假定返回值为int,然后尝试将其转换为float。这显然是错的。或者,你可以简单地为strtof()提供你自己的正确声明。
答案 4 :(得分:2)
正如其他人所说,你需要-std = c99。但你也可以使用字符串加倍的strtod(),你不需要-std = c99。
我在使用glibc 2.5的CentOS 5.5上遇到strtof()问题,除非我使用-std = c99,但是strtod()工作得很好。