#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)
#include<stdio.h>
int main()
{
char arr1[ ] = "hello"; // h e l l o \0
char arr2[ ] = { 'h','e','l','l','o' }; // h e l l o
char arr3[ ] = { 'h','e','l','l','o','\0' }; // h e l l o \0
printf("arr1=%s\n", arr1);//arr1=hello
printf("arr2=%s\n", arr2);//arr2=hello烫烫烫烫烫蘦ello
printf("arr3=%s\n", arr3); //arr3 = hello
printf("arr1=%d\n", strlen(arr1));
printf("arr2=%d\n", strlen(arr2));
printf("arr3=%d\n", strlen(arr3));
return 0;
}
印刷出力の違い:
arr1[] は文字列配列であり、二重引用符 ""を使用した特殊な配列式形式です。デフォルトでは、文字列 hello の末尾に「\0」が付いています。printft() は \0 より前の文字のみを出力します。
arr2[] は通常の文字配列で、hello の 5 文字が格納されていますが、printf() は印刷中に '\0' に遭遇した場合にのみ印刷を停止するため、hello の後に文字化けが印刷されます。
arr3[] は最後に「\0」を追加し、arr1 と同じ機能を実現します。ただし、arr1 はデフォルトで「\0」を追加しますが、arr3[] は手動で追加することで同じ機能を実現します。
配列の長さの違いを見つけます。
文字配列の長さを計算する場合も同様で、strlen() は \0 より前の文字数をカウントし、arr2 は print で表示される数値とまったく同じ 21 バイトを出力します (漢字 1 文字は 2 バイトを占めます) 。)。