-1

私は C++ で構築しているプログラムで本当に奇妙な問題を抱えています。ここで重要なのは、このオブジェクト (「スキャナー」) のコンストラクターがいくつかのファイル名を持つベクトルを受け取ることです。これらを別のファイルに渡し、そこからすべてを文字列ストリームに渡して他の場所でデコードします.2つのファイルでそれを実行しようとすると、最後のファイルに文字列「\ 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;
}

なぜそれが起こるのか、私は本当に完全に困惑しています.動作しますが、特にこれら 2 つを組み合わせると、すべてが台無しになります。

問題の原因となるファイルには次のものが含まれています: expresion3.calc

a = 3 + 4;\n

式4.計算

b = 3 * 4;\n

それらの中にあるのはそれだけですが、gdbでバッファの内容を確認すると、\nの後に\200\001があります。

私は本当に助けてくれる人を使うことができました、どうもありがとう。

4

1 に答える 1