2012-10-22 3 views
6

はそれがコールする(標準に従って=明確に定義された行動)完全にOKです。 これらの2つの関数のいずれかを呼び出す前に、指定されたサイズがnullであるかどうかをテストする必要があるかどうかを知りたいと思います。std :: ifstream :: readまたはstd :: ofstream :: zeroパラメータを使用した書き込み?</p> <pre><code>mystream.read(buffer, 0); </code></pre> <p>または</p> <pre><code>mystream.write(buffer, 0); </code></pre> <p>(そしてもちろん何も読まないか書き込まれます):

+0

サイズ0の特別な場合を作っています。他にはありません。 – Anirudha

+0

何も悪いことはありません。 – Archimaredes

+0

@Archimaredes、私は不安です。私はこれを試したときにMSVCの発砲を漠然と思い出しています。あなたは確信していますか? –

答えて

8

はい、ふたつの関数はフォーマットされていない入出力関数(sentryを構築し、eofbitが設定されていればfailbitを設定し、必要に応じて束縛されたストリームをフラッシュします)の動作を行います。この句を取得:

§27.7.2.3[istream.unformatted]/30

文字を抽出して格納されている以下のいずれかが発生するまでれる:

を - n文字が格納されています。以下のいずれかが

が発生するまで

は§27.7.3.7[ostream.unformatted]/5

文字が挿入されている - N文字が挿入されています。

「ゼロ文字が格納/挿入されています」は、何かが格納または抽出される前にtrueです。

実際の実装を見て、私はequivalent loop

0

を持ってfor (; gcount < n; ++gcount)in libc++またはsgetn(buffer, n);in stdlibc++27.7.2.3 Unformatted input functions/1から別の抽出はゼロサイズの入力バッファは有効なケースであることを私たちに手掛かりを与える参照してください。

未フォーマットの入力文字配列を非ゼロサイズとする関数は、配列の最初の位置にヌル文字(charT()を使用)も格納します。

関連する問題