我一直在为此苦苦挣扎太久。使用sscanf找到bug的来源
比方说,我有这个最小代码:
test.cxx
#include <iostream>
#include <cstdio>
int main (int argc, char *argv[])
{
const char *text = "1.01 foo";
float value = 0;
char other[8];
int code = sscanf(text, "%f %7s", &value, other);
std::cout << code << " | " << text << " | => | " << value << " | " << other << " | " << std::endl;
return 0;
}
$ g++ test.cxx; ./a.out
产生这样的输出,符合市场预期:
$ 2 | 1.01 foo | => | 1.01 | foo |
现在我有这5嵌入到具有几千行的项目中的线条,以及许多包括...
编译,运行,现在的输出是:
$ 2 | 1.01 foo | => | 1 | .01 |
我可以用什么策略来定位这一矛盾的根源?
编辑: export LC_ALL=C (or LC_NUMERIC=C); ./a.out
似乎解决我的问题
您正在使用什么平台? Atmel AVR有什么机会或类似的东西?在某些平台上启用'printf' /'scanf'中的浮点支持需要链接这些函数的特殊版本。 – AnT
在Ubuntu 16.04上使用cmake进行配置,gcc 5.3.1,没有交叉编译... – neok
另外,这个大项目中的locale设置是不同的吗?例如,在某些语言环境中'.'不被认为是小数部分的有效部分(','用来代替'.') – AnT