我已经为此苦苦挣扎太久了。
假设我有这个最小的代码:
测试.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
似乎解决了我的问题