我在用 c++ 构建的程序遇到了非常奇怪的问题,这里重要的是这个对象的构造函数(“扫描仪”)接收到一个带有一些文件名的向量,现在我想要做的是传递所有这些到另一个文件,然后从那里将它全部传递到一个字符串流以在其他地方解码,这一切都工作得很好,直到我试图用两个文件来做,突然最后一个文件得到了字符序列“\ 200 \ 001”附加到它一些奇怪的原因搞砸了我的整个程序,现在奇怪的是它只发生在某些文件上而不是其他文件上,坦率地说,我对正在发生的事情感到困惑。
以下是相关代码:
Scanner::Scanner(vector<string> files):
lineCount(1),
colCount(-1),
needToken(true),
lastToken(0),
lbl(false)
{
ifstream ifile;
ofstream ofile("temp.calc", ofstream::trunc);
ofile.close();
for(vector<string>::iterator it = files.begin(); it != files.end(); ++it){
ofile.open("temp.calc", ofstream::binary | ofstream::app);
ifile.open((*it).c_str(), ifstream::binary);
if(ifile.is_open() && ofile.is_open()){
ifile.seekg(0,ifile.end);
long size = ifile.tellg();
ifile.seekg(0);
char * buffer = new char[size];
ifile.read(buffer,size);
ofile.write(buffer,size);
delete[] buffer;
ifile.close();
ofile.close();
}
}
ifile.open("temp.calc");
ifile.seekg(0,ifile.end);
long size = ifile.tellg();
ifile.seekg(0);
char * buffer = new char[size];
ifile.read(buffer,size);
inStream = new istringstream(buffer);
ifile.close();
delete[] buffer;
}
我真的非常困惑为什么会发生这种情况,而且并非总是如此,例如我可能会使用 expresion1.calc 和 expresion2.calc 并且它可以工作文件,或者我可能会自己使用 expresion3.calc 或 4 并且它有效,但如果我特别将这两者结合起来,一切都会搞砸。
以下是导致问题的文件包含的内容:expresion3.calc
a = 3 + 4;\n
表达式4.calc
b = 3 * 4;\n
这就是它们里面的全部内容,然而,当我用 gdb 检查缓冲区的内容时,在 \n 之后会有 \200\001。
我真的可以使用帮助家伙,非常感谢。