标准流打印不相关的字符

时间:2012-03-03 14:24:40

标签: c++ string file stream

我正在编写代码并且我的代码在某些情况下无法正常工作,因此我决定将一些输出写入文件以进行调试。该程序只是连接一个字符串中的一些字符(并没有超出界限)并将它们打印到文件中。它没有错误报告或其他东西,输入字符串只是一堆随机字符。但是,我在输出中得到了一些垃圾,例如:

f::xsgetn error reading the file
sgetn error reading the file
ilebuf::xsgetn error reading the file

(我删除了程序的输出,这只是额外的东西。)

据我所知,如果有任何错误,必须抛出异常。会发生什么,我该如何解决?

当我使用标准输出打印输出时,会发生同样的事情。所有使用的库都是标准库(例如,iostream,fstream等)

PS:由于某些原因,我无法发布所有代码。这是创建输出并将其传递给stream的部分:(tri is和string,之前已定义.Center是一个整数,位于字符串的边界内.fout是先前定义的文件流。)

string op = "" + tri[center];
fout << center << "<>" << op << endl;

2 个答案:

答案 0 :(得分:1)

由于tristringtri[center]char
""的类型为const char[],无法添加到char 相反,它会隐式转换为const char*可以添加到char

不幸的是,结果是tri[center]的整数值被添加到指针作为偏移量,而不是作为字符串连接,以及特定的内存区域结果引用的不包含您正在寻找的内容,而是包含其他静态字符串,例如“读取文件时出错”。

要解决此问题,请使用

string op = string(“”)+ tri [center];

代替。

答案 1 :(得分:1)

我在另一个程序中遇到了同样的问题,我曾写过:

str += blablabla + "#";

我看到一些不相关的字符被打印出来。我这样解决了:

str = str + blablabla + "#";

它有效!

+=的{​​{1}}运算符存在一些问题。