我目前正在调试有时可行的代码,有时却没有.它是一个OBJ文件加载器,我找到了产生问题的部分:
double val = strtod(str, &endptr);
Run Code Online (Sandbox Code Playgroud)
为了解释这个问题,我将给你一个strtod
调用后的值的例子.
str = "-0.021344"
val = -0
*endptr = '.'
Run Code Online (Sandbox Code Playgroud)
在该行后面进行错误检查并且如果*endptr != '\0'
抛出错误.现在当然会抛出错误,因为strtod
将点标记为数字的结尾,但为什么会这样呢?另请注意,在QT项目中使用代码时,我只遇到此错误.
谢谢你的想法.
也许你正在使用小数点不是的语言环境.
.setlocale(LC_NUMERIC, "C");
在strtod
声明之前尝试.
注意:我不知道语言环境和QT如何表现在一起.您可能希望保存并恢复区域设置...
char *saved_locale;
saved_locale = setlocale(LC_NUMERIC, "C");
/* do your strtod thing */
setlocale(LC_NUMERIC, saved_locale);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1578 次 |
最近记录: |