8

私はかなり長い間 C を使用してきましたが、照会したいこの些細な問題があります。

最大 1000 文字を格納する文字配列を作成したいとします。さて、同じために malloc を使用している場合、配列のサイズを 1001 文字 [ 1000 文字 + null] または 1000 として指定しますか?

また、この問題に遭遇したとしたら、おそらくいくつかのテストプログラムを使用して、この解決策に対する答えを自分で見つけることができたでしょうか。文字列のサイズがヌル文字なしで計算されることは理解していますが、同じメモリを割り当てる場合、ヌル文字も考慮に入れる必要がありますか?

4

4 に答える 4

9

null で終わる文字列を格納するためにそのブロックが必要な場合は、はい、malloc()null ターミネータを格納するために余分なバイトを割り当てるように明示的に要求する必要がありmalloc()ます。それ以外の場合はそれを行いません。文字列の長さを別の場所に保存するつもりで、null ターミネータが必要ない場合は、余分なバイトを割り当てずに逃げることができます。もちろん、文字列に null 終端が必要かどうかはあなた次第ですが、C ライブラリの文字列処理関数は null 終端文字列でのみ機能することを忘れないでください。

于 2013-07-08T08:57:43.510 に答える
1

実際、ヌル ターミネータにメモリを割り当てる必要があります。

概念的には、ヌル ターミネータは、文字列の末尾をマークする便利な方法にすぎません。C 標準ライブラリは、文字列をモデル化するときにこの規則を利用します。たとえば、strlen は、入力位置 (おそらく char*) から null ターミネータに到達するまでメモリを調べて、文字列の長さを計算します。ただし、ヌル ターミネータ自体は長さに含まれません。しかし、それはまだ文字列によって消費されるメモリの一部です。

于 2013-07-08T08:46:01.807 に答える