C ++ string.substr的编译方式不同

时间:2018-08-15 08:32:45

标签: x11 c++ g++

我有两对文件。源文件是相同的副本,除了它们所查询的相同文本文件的路径之外。 一对在Linux Cinnamon 18.x上运行,另一对在Raspbian Stretch上运行。每对都在自己的平台上编译。

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|,在肉桂上生成6 |19555\n|。 ({\n当然仅代表此站点上的CR。) 我认为这是C ++编译器问题。那是对的吗?如何使代码可移植?

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题出在ImportDS18B20()函数上,而不是您发布的代码或编译器上。要验证文件是否相同,请检查长度和md5sum。

我会删除尾随的\ r(和\ n以使其跨平台)

sFloor = sTemp.substr(p);

while (sTemp.back() == '\r' || sTemp.back() == '\n')
    sTemp.pop_back();

uint uTemp = sFloor.length();

迈克