C++ std::string使用+=后追加变成了覆盖

发布时间:2024年01月14日

背景

在进行OCR的rec的时候,读取了一个本地文件表加载到一个std::vector<std::string> labelList,然后循环把推理的结果转为为idx,使用labelList[i]获取当前字符的结果,再用一个外层的std::string resStr进行连接得到最后的答案resStr += labelList[i]

问题

这看起来没啥问题,但在打印resStr的时候,只有一个结果(在循环中打印每一个labelList[i]应该是24.1)。为啥本应该追加的字符串被覆盖了。

解决

检查了半天才发现,是本地文件表的换行符的问题,本地文件表的换行符为CRLF,只要修改为LF即可解决问题。

原因

  • CR(CarriageReturn):代表回车,指回到一行的开头,对应\r,ASCII代码是13
  • LF(LineFeed):代表换行,指另起一行,对应字符\n,ASCII代码是10

在Windows中,使用CRLF来结束一行即\r\n,所以我们平时编写文件的回车符应该确切来说叫做回车换行符。而在Mac和Linux系统,只使用LF来结束一行,即\n

文章来源:https://blog.csdn.net/qq_39798423/article/details/135579757
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。