背景
在进行OCR的rec的时候,读取了一个本地文件表加载到一个std::vector<std::string> labelList,然后循环把推理的结果转为为idx,使用labelList[i]获取当前字符的结果,再用一个外层的std::string resStr进行连接得到最后的答案resStr += labelList[i]。
问题
这看起来没啥问题,但在打印resStr的时候,只有一个结果里(在循环中打印每一个labelList[i]应该是2,4,.,1,公,里)。为啥本应该追加的字符串被覆盖了。
解决
检查了半天才发现,是本地文件表的换行符的问题,本地文件表的换行符为CRLF,只要修改为LF即可解决问题。
原因
- CR(CarriageReturn):代表回车,指回到一行的开头,对应
\r,ASCII代码是13- LF(LineFeed):代表换行,指另起一行,对应字符
\n,ASCII代码是10
在Windows中,使用CRLF来结束一行即\r\n,所以我们平时编写文件的回车符应该确切来说叫做回车换行符。而在Mac和Linux系统,只使用LF来结束一行,即\n。