キャラクターの観点から見てください:
char a[]="Visual C++";
printf("length = %d\n", strlen(a));
for(int i = 0; i<strlen(a); i++)
printf("a[%d] = %c (ASCII %d)", i, a[i], a[i]);
このようなコードを使用すると、次のようになります
length = 11
a[0] = V (86)
a[1] = i (105)
a[2] = s (115)
a[3] = u (117)
a[4] = a (97)
a[5] = l (108)
a[6] = (32)
a[7] = C (67)
a[8] = + (43)
a[9] = + (43)
a[10] = (0)
これらの値をASCIIテーブルNULL
と照合すると、11(ターミネーター)が表示される理由がわかります。
char b[] = "Visual\C++";
2番目の文字列にはエスケープ文字が含まれており、それらのリストは\
たくさんありますが、基本的には、次の文字は印刷されないため、特別なものであるため、無視するようにコンパイラに指示します。改行文字のように:'\n'
元の投稿に対するあなたのコメントに基づいて、私は2つの追加事項を明確にする必要があると思います。
追記1:'\n'
改行やヌルターミネータ
などの特殊文字は、'\0'
1バイトの余分なスペースしか必要としません。
追記2:
sizeof(a)
配列は1バイトしかかからない文字でいっぱいなので、配列のサイズ(文字数)がわかります。より多くのスペースを占める他のタイプでこれを使用する場合は、もう1つの手順を実行する必要があります。
int arr[4] = {0};
int size_of_arr = sizeof(arr/sizeof(int));