3

ファイルから読み取っても文字列ストリームから読み取っても同じように動作させたいテキスト解析があります。std::istreamそのため、すべての作業を実行するために an を使用しようとしています。文字列バージョンでは、作成した静的メモリ バイト配列 (元々はテキスト ファイルからのもの) から読み取ろうとしています。元のファイルが次のようになっているとします。

4

対応するバイト配列は次のとおりです。

const char byte_array[] = { 52, 13, 10 };

ここで、52 は文字 4 の ASCII であり、次にキャリッジ リターン、そしてラインフィードです。

ファイルから直接読み取ると、解析は正常に機能します。

次のように「文字列モード」で読み込もうとすると:

std::istringstream iss(byte_array);
std::istream& is = iss;

このメソッドを使用して、stringstream から取得した文字列の末尾にキャリッジ リターンがスタックしてしまいます。

std::string line;
std::getline(is, line);

string.empty()メソッドが「空白」行でトリガーされなくなったため、これにより解析が台無しになり13ます。バイナリデータを生成した元のファイルで空であっても、すべての行に少なくともキャリッジリターンの a が含まれています。

この点でと のifstream動作が異なるのはなぜですか? バージョンと同じように、バージョンでキャリッジ リターンを破棄するistringstreamにはどうすればよいですか?istringstreamifstream

4

1 に答える 1