Shammer's Philosophy

My private adversaria

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";というような宣言をするのがよさそうだ。