Cのchar配列初期化備忘録

ふと思ったのでちょこっとテスト.
なお実利用のときは全く問題ないので意識する必要はないはず.組込みでも使ったことない.


ソースコード

#include <stdio.h>

int main(void) {
	char str[][6] = {"What", "Where", "how"};
	char* pstr[] = {"What", "Where", "how"};


	puts("str");
	for (int i = 0; i < sizeof(str)/sizeof(str[0]); i++) {
		for (int j = 0; j < sizeof(str[0])/sizeof(str[0][0]); j++) {
			if (str[i][j] == '\0') {
				printf("\'\\0\' ");
			} else {
				printf("%4c ", str[i][j]);
			}
		}
		puts("");
	}

	puts("pstr");
	for (int i = 0; i < sizeof(pstr)/sizeof(pstr[0]); i++) {
		for (int j = 0; j < sizeof(pstr[0])/sizeof(pstr[0][0]); j++) {
			if (pstr[i][j] == '\0') {
				printf("\'\\0\' ");
			} else {
				printf("%4c ", pstr[i][j]);
			}
		}
		puts("");
	}

	return 0;
}

実行結果

str
   W    h    a    t '\0' '\0' 
   W    h    e    r    e '\0'
   h    o    w '\0' '\0' '\0'
pstr
   W    h    a    t '\0'    W    h    e
   W    h    e    r    e '\0'    h    o
   h    o    w '\0'    s    t    r '\0'

pstr最後のは何だ…なんかミスったか…
と,いうことで書き直し

#include <stdio.h>

int main(void) {
	char* pstr[] = {"hoge", "foo", "fugaa"};

	puts("普通に表示");
	for (int i = 0; i < sizeof(pstr)/sizeof(pstr[0]); i++) {
		printf("%s", pstr[i]);
		puts("");
	}
	puts("");

	puts("1文字ずつ");
	for (int i = 0; i < sizeof(pstr)/sizeof(pstr[0]); i++) {
		for (int j = 0; j < sizeof(pstr[0])/sizeof(pstr[0][0]); j++) {
			if (pstr[i][j] == '\0') {
				printf("\'\\0\' ");
			} else {
				printf("%4c ", pstr[i][j]);
			}
		}
		puts("");
	}

	return 0;
}

実行結果

普通に表示
hoge
foo
fugaa

1文字ずつ
   h    o    g    e '\0'    f    o    o
   f    o    o '\0'    f    u    g    a
   f    u    g    a    a '\0'    □    □


あー,前々ミスってただけか.ほんとCは気が抜けねえな.
まあ知識ない状態で色々書き込みまくってた時期があったしまあしゃあない.

なんか基礎の基礎ってホント意識しないと疑問に思わないから怖い.
まあ本当に必要ない知識だろうし,これ以上は追ったところで使わないのでこんなもんで.

んじゃ.


この記事が気に入ったらサポートをしてみませんか?