バッファオーバーフローが心配なので、std::istreamから派生したクラスからいくつかの文字を取得する必要があります。私が理解していることから、私自身の>>演算子がなければ、istreamから直接std::stringにストリーミングする方法はありません。そのため、コンテンツをchar配列にストリーミングし、それをstd::stringに入れることを検討していました。簡単な例を次に示します。
char CharArray[1000] = {0};
SomeIStream >> CharArray;
std::string StuffFromStream(CharArray);
ただし、CharArrayがオーバーフローしないことを知る方法はないようです。ストリーム抽出演算子がchararrayに書き込む最大値はありますか?先制的に抽出される量を確認する方法はありますか?これはすべて間違っていますか、これよりもはるかに優れた方法はありますか?
Edit1 :、メモリリークではない問題を修正しました。削除を呼び出す必要はありません。信じられない。
Edit2:文字列に直接>>を使用する提案が提案されました。以前のコードベースでこの問題が発生したことを試みましたが、失敗しました。オペレーターに適した一致が見つからなかったと言っています。次に、std :: fstreamを試してみましたが、再び失敗しました。単純なミニマルプロジェクトでstd::fstreamコードを試すことに成功しました。これは、私のより大きなプロジェクトに何か他の問題があることを示しています。この質問の本来の意図はもはや有効ではありません。
Edit3:私はこれを解決しました。私はtypedefStringにストリーミングしようとしましたが、これは実際にはstd :: stringだと思っていましたが、実際にはconst std::Stringでした。当然、書き込み不可能なオブジェクトに書き込むためのストリーム抽出演算子はありません。そのため、istreamヘッダーにリストされているすべての演算子が表示されます(必要な演算子は文字列ヘッダーにあります)。
私の誤った研究を指摘し、正しい方向に私を向けてくれた人々に感謝します。