2010-12-17 23 views
4

Cが配列の初期化をどのように扱うのか不思議でした。プログラムに次のコードがあります。C配列の初期化

UChar match[] = {0xdf, 'a', 'b', '\0'}; 

基本的に、これはUTF-16文字列を初期化しています。この場合のUCharは16ビットです。

私の質問は文字列の末尾に末尾のNULLバイトが必要ですが、それを初期化に含める必要がありますか、またはCが自動的にすべての配列の初期化にインクルードしますか?

+0

配列が修正されているかどうかによって異なります。 –

答えて

11

はい、あなたはあなた自身をNULLで終端する '\ 0'を追加する必要があります - Cはの文字列リテラルであり、配列ではありません。例えば

-

char* str = "12345"; 

は6つの文字、 '\ 0' である第1の配列となります。これは、6つの項目があります

char str[] = "12345"; 

- のため

同じことが行きます。

BUT -

char str[] = { '1', '2', '3', '4', '5' }; 

は終端の '\ 0' せずに、正確に5項目を持つことになります。

(あなたの初期設定では、すでに '\ 0'があるので、他に何も必要ありません)。

1

char配列を文字列として操作する場合は、終端文字が必要です。であるあなたがあなたの文字列が、この

char str[6]={'h','e','l','l','o'}; 

私のポイントのような配列を作成5文字が含まれていることを知っていると 文字列を明示的に\0を入れたくない場合は

0

あなたはこれを行うことができますも、あなたの場合残りの値は0sで埋められます。 だから

int arr[5]={1,2,3}; 

のために今あなたが

printf("%d",a[3]); or  printf("%d",a[4]); 

の両方を行う場合0になります。