2011-10-25 10 views
3

ファイルから文字列を読み込むためにfgetcを使用しています。文字列がどれくらいの長さでデータを保持する配列のスペースを再割り当てする必要があるかはわかりません。そのために、私は現在の配列がいっぱいであることを知る必要があります。文字列を読み込んだ後にchar配列がnullで終わるかどうかはよくわかりません。例えば、私はサイズ8の配列を持っていて、fgetcは9番目のcharを与えるつもりです。配列のサイズは現在8または9ですか? (8文字+ \ 0または8文字のみ)。それをテストする方法はありますか? \ 0がない場合。文字列を読み終えたら、それをchar配列に追加する必要がありますか?Stringがnullで終了するかどうかを知る方法

+1

すべての標準文字列関数は、そこにあるNULL文字に依存します。したがって、それを追加する必要があります。そうでないと、奇妙な問題で実行することになります – RageZ

答えて

0

fgetcは文字列のサイズを取得するために1回の呼び出しで1文字を読み込むので、読み込み文字を\ 0またはEOFにする必要があります。 \ 0バイトが表示されている場合は、\ 0を含むすべてのバイトをコピーする必要があります。 \ 0でなくEOFに達し、文字カウンタが0より大きい場合は、自分自身に\ 0を追加する必要があります。

2

バッファの現在のサイズと文字を追加する位置の両方を把握する必要があります。位置がサイズと等しい場合は、バッファを増やす必要があります。末尾の\0文字に対応するには、実際のサイズは+1である必要があります。この文字は、最後に読み取った文字の後に常に追加する必要があります。

1

文字列をバイト単位で保持するメモリを構築しているので、終端文字 '\ 0'の余分なバイトが必要なため、メモリ割り当てを合計文字列長+1にする必要があります。

"string"で機能する関数は、実際には '\ 0'で終わるバイトのコレクションを見ています。たとえば、 "Hello World"は "H"、 "I"、 "O"、 "W"、 "d"それは関数が文字列の処理をいつ停止するかを知る方法です。

関連する問題