标准流打印无关字符

Posted

技术标签:

【中文标题】标准流打印无关字符【英文标题】:Standard Stream Printing Unrelated Characters 【发布时间】:2012-03-21 18:07:41 【问题描述】:

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

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

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

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

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

PS:由于某些原因,我无法发布所有代码。这是创建输出并将其传递给流的部分:(tri 是和字符串,并且是先前定义的。中心是整数并且在字符串的范围内。fout 是先前定义的文件流。)

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

【问题讨论】:

您的代码有错误。没有人可以从这里看到它。 您是否希望我们神奇地知道您做错了什么而不看您实际做了什么?据我们所知,您没有在第 12 行分配足够的内存。 @KerrekSB:你怎么了?很明显,错误在第 42 行! @JerryCoffin:那太糟糕了:您在编辑后发表了评论,因此您已经知道没有看到代码的“某些原因”。当然,现在第 42 行的可能性更大。 @KerrekSB:但是你怎么可能没有意识到 42 是总是的答案? 【参考方案1】:

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

str += blablabla + "#";

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

str = str + blablabla + "#";

它成功了!

string+= 运算符存在一些问题。

【讨论】:

【参考方案2】:

因为tristring,所以tri[center]char"" 的类型是const char[],不能添加到char。 相反,它被隐式转换为const char*可以添加到char

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

要修复它,请使用

string op = string("") + tri[center];

改为。

【讨论】:

谢谢!非常有趣的答案。我不知道这个。

以上是关于标准流打印无关字符的主要内容,如果未能解决你的问题,请参考以下文章

标准输入流和输出流分别是啥,高效字符流的方法

js中带 其他无关字符的长字符串转标准json对象

js中带 其他无关字符的长字符串转标准json对象

字符流+打印流

字符缓冲流,properties类,序列化流与反序列化流,打印流

如何高效的使用IO流?字节流字符流缓冲流序列化对象流打印流全整理