C++ string.substr 编译方式不同
C++ string.substr compiles differently
我有两对文件。除了它们查询的相同文本文件的路径外,源文件是相同的副本。
一对在 Linux 肉桂 18.x 上运行,另一对在 Raspbian 拉伸上运行。每对都在自己的平台上编译。
std::string sTemp = ImportDS18B20("testy.txt");
if (sTemp.find("YES") != std::string::npos) {
size_t p = sTemp.find("t= ");
if (p != std::string::npos) {
p += 3;
sFloor = sTemp.substr(p);
uint uTemp = sFloor.length();
std::cout << uTemp << " |" << sFloor << "| " << std::endl;
}
break;
}
代码在 Raspbian 上生成 5 |19555|
,在 Cinnamon 上生成 6 |19555\n|
。 (\n
当然只是代表本站的一个CR
。)
我假设这是一个 C++ 编译器问题。那是对的吗?如何使代码可移植?
我怀疑您的问题出在 ImportDS18B20() 函数上,而不是您发布的代码或编译器。要验证文件是否相同,请检查长度和 md5sum。
我会删除尾随的 \r(和 \n 以使其跨平台)
sFloor = sTemp.substr(p);
while (sTemp.back() == '\r' || sTemp.back() == '\n')
sTemp.pop_back();
uint uTemp = sFloor.length();
麦克
我有两对文件。除了它们查询的相同文本文件的路径外,源文件是相同的副本。 一对在 Linux 肉桂 18.x 上运行,另一对在 Raspbian 拉伸上运行。每对都在自己的平台上编译。
std::string sTemp = ImportDS18B20("testy.txt");
if (sTemp.find("YES") != std::string::npos) {
size_t p = sTemp.find("t= ");
if (p != std::string::npos) {
p += 3;
sFloor = sTemp.substr(p);
uint uTemp = sFloor.length();
std::cout << uTemp << " |" << sFloor << "| " << std::endl;
}
break;
}
代码在 Raspbian 上生成 5 |19555|
,在 Cinnamon 上生成 6 |19555\n|
。 (\n
当然只是代表本站的一个CR
。)
我假设这是一个 C++ 编译器问题。那是对的吗?如何使代码可移植?
我怀疑您的问题出在 ImportDS18B20() 函数上,而不是您发布的代码或编译器。要验证文件是否相同,请检查长度和 md5sum。
我会删除尾随的 \r(和 \n 以使其跨平台)
sFloor = sTemp.substr(p);
while (sTemp.back() == '\r' || sTemp.back() == '\n')
sTemp.pop_back();
uint uTemp = sFloor.length();
麦克