char[] のサイズ
char[] で文字列データを宣言する際、あらかじめ領域を確保しておく必要がある。strlen では、最後の '\0' はサイズに含まれていなかったけれども、宣言する際には含めておかなければならないようだ。以下のようにすれば問題なくコンパイルできるが、
#include <stdio.h> #include <string.h> int main(int argc, char* args[]){ char array[11] = {'0','1','2','3','4','5','6','7','8','9','\0'}; printf("char[] array = %s size is %d.\n", array, strlen(array)); return 0; }
以下のようにした場合は警告が出る。
#include <stdio.h> #include <string.h> int main(int argc, char* args[]){ char array[10] = {'0','1','2','3','4','5','6','7','8','9','\0'}; printf("char[] array = %s size is %d.\n", array, strlen(array)); return 0; }
実際に出力される警告は以下。
warning: excess elements in array initializer [enabled by default] warning: (near initialization for ‘array’) [enabled by default]
文字列を使用する場合は、char* と char[] - Shammerismの char * value = "ABC";というような宣言をするのがよさそうだ。