我目前正在调试的代码,有时工作,有时不。
它是一个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);

10-08 01:53