VS2012 中的 strtof() 在哪里?
Posted
技术标签:
【中文标题】VS2012 中的 strtof() 在哪里?【英文标题】:Where is strtof() in VS2012? 【发布时间】:2015-05-28 22:46:33 【问题描述】:我几乎找不到这个函数在哪个库/头文件中,我看过很多人使用这个函数的例子,但没有结果...... 这些是我包含的所有内容:
#include "Console.h"
#include "Direct3D9.h"
#include <string>
#include <cerrno>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <cmath>
#include <stdio.h>
#include <stdlib.h>
但仍然出现 strtof,因为“错误命名空间“std”没有成员“strtof””
我正在尝试做的事情:
flValue = std::strtof( vszArgs.at( 1 ).c_str( ), NULL );
pConVar->Set( flValue );
【问题讨论】:
en.cppreference.com/w/c/string/byte/strtof 它仍然不是标准的一部分。它说它应该是 cstdlib 的一部分,但是打开文档时没有 strtof :/ 正如参考文献所述,您需要完全支持和检测您的 c 编译器的 C99 标准功能。strtof
被 1999 年标准添加到 C 中,并被 2011 年标准添加到 C++ 中。只需改用strtof
;它返回一个double
结果,可以很容易地转换为float
。如有必要,您可以添加范围检查。或者您可能只想使用double
而不是float
。
你试过std::stof
,C++ 版本吗?无论如何,您似乎有一个std::string
,它直接将其作为参数(无需调用c_str()
)。
【参考方案1】:
Visual Studio 2012 没有实现strtof
。
Link to MSDN bug report,其中包含建议的解决方法。
【讨论】:
那么无论如何你都可以得到它们,也许是它如何工作的原始函数? 我找不到任何关于如何实现 strtof 的链接。 他们建议改用函数_atoldbl
【参考方案2】:
使用 C++11 时,您可以在 cstdlib
中找到它。信息可以在这里轻松找到:http://www.cplusplus.com/reference/cstdlib/strtof/?kw=strtof
我的猜测是您没有使用 c++11 进行编译。
【讨论】:
我正在使用 Visual Studio 2012【参考方案3】:1) 包含 stdlib.h
#include <stdlib.h> /* strtof */
来自http://www.cplusplus.com/reference/cstdlib/strtof/
如果还是不行的话……
2) 确保您的编译器是 C++11 或更新版本
它是 C++11 的新功能,所以如果你有旧的编译器,它就无法工作。
如果还是不行的话……
3) 你的编译器可能不支持它
Visual C++ 2012 不完全支持 C++11 标准。请参阅 Visual Studio 错误"Missing strtof, strtold, strtoll, strtoull functions from stdlib.h"。
我们在 CRT 中还没有这些功能。我们将考虑将它们添加到 Visual C++ 的未来版本中。
【讨论】:
是的,但对我来说不在 cstdlib 中,例如,如果我打开 cstdlib 文档,它不存在,任何更改任何人都有它的原始功能?这些是我在 cstdlib 中唯一可用的 strto 函数: using _CSTD strtod;使用_CSTD strtol;使用 _CSTD strtoul; @Oskar 查看编辑。如果你没有看到它,那么你必须有一个比 C++11 更早的编译器 我用的是 Visual Studio 2012,还不够新吗? @OskarDahlberg “这还不够新吗?” 我们现在有 Visual Studio 2015。 2012年陈年,可以说是好老酒,没有任何新鲜的色调。顺便说一句,GCC 4.8 或更早版本也是如此。以上是关于VS2012 中的 strtof() 在哪里?的主要内容,如果未能解决你的问题,请参考以下文章