我目前正在调试的代码,有时工作,有时不。
它是一个obj文件加载器,我发现了产生问题的部分:
double val = strtod(str, &endptr);
为了解释这个问题,我将给您一个调用
strtod
后的值示例。str = "-0.021344"
val = -0
*endptr = '.'
在这一行后面,错误检查完成,如果
*endptr != '\0'
则抛出错误。现在当然会抛出一个错误,因为
strtod
将点标记为数字的结尾,但为什么会这样?另外请注意,我只在qt项目中使用代码时遇到此错误。
谢谢你的意见。
最佳答案
也许你用的是一个小数点不是.
的locale。在setlocale(LC_NUMERIC, "C");
语句之前尝试strtod
。
注意:我不知道locale和qt在一起是如何表现的。您可能需要保存和还原区域设置…
char *saved_locale;
saved_locale = setlocale(LC_NUMERIC, "C");
/* do your strtod thing */
setlocale(LC_NUMERIC, saved_locale);