【发布时间】:2013-07-19 09:27:58
【问题描述】:
我正在使用库将 Wavefront .obj 文件加载到我的 OpenGL 应用程序 (tinyobjloader) 中。我注意到加载对象时出现错误。当我加载一个坐标为例如的对象时。 0.9999999 设置为 0。通过调试我发现以下方法会产生这种行为:
static inline float parseFloat(const char*& token)
{
token += strspn(token, " \t");
float f = (float)atof(token);
token += strcspn(token, " \t\r");
return f;
}
所以 atof() 以某种方式返回一个 int,而不是一个 float。我读到有些编译器在使用 atof() 时不包含“stdlib.h”,结果是 atof() 返回一个整数。
奇怪的是,即使我包含“stdlib.h”,错误仍然存在。我不知道是什么导致了这种行为。
有什么想法吗?
【问题讨论】:
-
确保使用
gcc -Wall ...(或等效项,即启用警告)进行编译。 -
为什么不使用 std::istringstream?
-
这是一个外部库。这就是我不使用 std::stringstream 的情况。
-
什么是编译器、操作系统、版本?
-
那么“0,9999999”呢