Shammer's Philosophy

My private adversaria

配列の空き要素は?

char[] のサイズ - Shammerismの内容と少し関係あるかも。
初期値を10として配列を宣言したけれども、実際には10も使用しなかった、という場合、空き領域はどうなるのか確認してみた。どうやら、0 で初期化される。さらに、文字列の場合、strlen を使用することでその空き領域なしのサイズを取得することができる。strlen を使用してサイズを確認し、最後の'\0'用にサイズを1増やすようなことができるみたいだ。

#include <stdio.h>
#include <string.h>

int main(int argc, char * args[]){
    char array[10] = "ABCDEFG";
    printf("char array[10] = \"ABCDEFG\";\n");
    printf("sizeof(array) = %lu\n", sizeof(array));
    printf("strlen(array) = %lu\n", strlen(array));
    int i;
    for( i = 0 ; i < sizeof(array) ; i++ ){
	printf("%d: char -> %c : int -> %d\n", i, array[i], array[i]);
    }
    printf("END!\n");
    return 0;
}

実行結果は以下の通り。

$ ./a.out
char array[10] = "ABCDEFG";
sizeof(array) = 10
strlen(array) = 7
0: char -> A : int -> 65
1: char -> B : int -> 66
2: char -> C : int -> 67
3: char -> D : int -> 68
4: char -> E : int -> 69
5: char -> F : int -> 70
6: char -> G : int -> 71
7: char ->  : int -> 0
8: char ->  : int -> 0
9: char ->  : int -> 0
END!