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();

麦克