2012-03-03 33 views
3

我编码的东西和我的代码在某些情况下无法正常工作,所以我决定写一些输出到文件进行调试。该程序只是连接字符串中的一些字符(并没有超出界限)并将其打印到文件中。它没有任何错误报告或其他东西,输入字符串只是一堆随机字符。但是,我得到一些垃圾输出,如:(我删除了程序的输出,这仅仅是多余的东西)标准串流打印不相关字符

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

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

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

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

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

您的代码有一个错误。没有人能从这里看到它。 – 2012-03-03 14:29:17

+1

你是否期望我们神奇地知道你做错了什么,却没有看到你实际做了什么?对于我们所知道的你没有在第12行分配足够的内存。 – 2012-03-03 14:33:17

+1

@KerrekSB:你怎么了?这是非常明显的错误是在42线! – 2012-03-03 15:56:35

回答

1

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

不幸的是你的,其结果是,tri[center]整数值加入到该指针作为偏移,而不是作为一个字符串连接,以及存储器的特定区域,该结果是指不包含你正在寻找的东西,而是包含其他静态字符串,例如“读取文件时出错”。

为了修正它,使用

串OP =字符串( “”)+三[中心];

改为。

+0

谢谢!非常有趣的答案。我不知道这一点。 – MMS 2012-03-04 17:49:21

1

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

str += blablabla + "#"; 

,我看到了正在印刷的一些不相关的人物。我这样固定它:

str = str + blablabla + "#"; 

它的工作!

对于string+=运营商存在一些问题。