Cが配列の初期化をどのように扱うのか不思議でした。プログラムに次のコードがあります。C配列の初期化
UChar match[] = {0xdf, 'a', 'b', '\0'};
基本的に、これはUTF-16文字列を初期化しています。この場合のUCharは16ビットです。
私の質問は文字列の末尾に末尾のNULLバイトが必要ですが、それを初期化に含める必要がありますか、またはCが自動的にすべての配列の初期化にインクルードしますか?
Cが配列の初期化をどのように扱うのか不思議でした。プログラムに次のコードがあります。C配列の初期化
UChar match[] = {0xdf, 'a', 'b', '\0'};
基本的に、これはUTF-16文字列を初期化しています。この場合のUCharは16ビットです。
私の質問は文字列の末尾に末尾のNULLバイトが必要ですが、それを初期化に含める必要がありますか、またはCが自動的にすべての配列の初期化にインクルードしますか?
はい、あなたはあなた自身をNULLで終端する '\ 0'を追加する必要があります - Cはの文字列リテラルであり、配列ではありません。例えば
-
char* str = "12345";
は6つの文字、 '\ 0' である第1の配列となります。これは、6つの項目があります
char str[] = "12345";
- のため
同じことが行きます。
BUT -
char str[] = { '1', '2', '3', '4', '5' };
は終端の '\ 0' せずに、正確に5項目を持つことになります。
(あなたの初期設定では、すでに '\ 0'があるので、他に何も必要ありません)。
char配列を文字列として操作する場合は、終端文字が必要です。であるあなたがあなたの文字列が、この
char str[6]={'h','e','l','l','o'};
私のポイントのような配列を作成5
文字が含まれていることを知っていると 文字列を明示的に\0
を入れたくない場合は
あなたはこれを行うことができますも、あなたの場合残りの値は0s
で埋められます。 だから
int arr[5]={1,2,3};
例
のために今あなたがprintf("%d",a[3]); or printf("%d",a[4]);
の両方を行う場合0
になります。
配列が修正されているかどうかによって異なります。 –