2016-06-11 17 views
-1

例でNULを追加します。文字配列の初期化:エンド

char s[]={'I',' ','a','m',' ','a',' ','g','o','o','d',' ','g','u','y','\O'}; 

char s[]={'I',' ','a','m',' ','a',' ','g','o','o','d',' ','g','u','y',}; 

は、最後にNULと文字配列を初期化するために常に必要ですか? NULが追加されていない場合、2番目の例は機能しますか?また、Nulを最後に追加する必要があるのはなぜですか?

+3

これは '\ O'ですか? (スラッシュの後ろに文字Oが続く) – user3144238

+0

長さが不明な文字配列のBtwは、このように宣言すると自動的に 'NULL'が代入されます' char s [] = "これは文字列です " – Cherubim

+0

@CherubimAnand:文字配列とC-"文字列 "に違いがあります! – Olaf

答えて

4

常に最後常に

ないでNULLを持つ文字配列を初期化する必要があります。文字配列が文字列のように動作するようにする必要があります。

ので、あなただけの、読んで、通常の配列のようなその配列に書き込みたい場合はNUL終わりに必要とされていない(ところで、それはNUL、およびNULLはありません)。しかし、strlen()などの文字列関数を使用したい場合は、NULが必要です。


何NULLが第二の例は、あなたが任意の通常の配列のように扱うまで完全に正常に動作し、文字列を好きではないだろう

を追加されていない場合は、2番目の例の仕事をされます。意味、あなたがstrlen()またはそれに似たような文字列関数を使用しない場合、正常に動作するはずです。

+0

ワンダフルな答え。私はあなたが文字列を印刷したい場合にも必要だと思います。 printf( "これは文字列:%s"、s)と同様です。 – Harald

+1

@Matputer 'NUL'は' '\ 0''または '0'(同じ)を意味し、' NULL'は '(void *)0'に展開されるマクロです(このマクロはシステムによって異なる場合があります) –

+0

'NUL'と' NULL'の間に違いはありますか? –