藤原と申します。 This message is reply to 藤田僚平 - san (Subject was : [H8-ML(2145)] Re: 型変換に関して) Message-ID: <20020812113729.A72D.FUJIKKO@xxxxxxxxxxxxxxx> in Mon, 12 Aug 2002 11:38:28 +0900 ... > #include<stdio.h> > char c[4] = " \0"; 通常、char の配列の初期化に、\0 を付加することは不要です。 というか、" " という文字列リテラルは、C言語では、後続の \0 が暗黙のうちに付加されます……ということになっています。 でも、だからと言って、 char c[3] = "123"; としてしまうと(char 3個しか確保されないので)\0 は付加されません。 char c[4] = "123" ; だと、c[3] == '\0' が保証されます。 また、明示的に個数を指定せずに、 char c[] = "123"; とすると、c が4個確保されて、c[3] == '\0' が保証されます。 また、組み込み系の(というか、ROM 化すると)グローバルな配列の 初期化は、ほぼ、期待通りには動作しないので、注意が必要です。 グローバルな配列を初期化すると、本来、RAM に割り当てらる場所に、 その実体が取られます。初期値も、RAM上に取られます。 これは、エミュレーションだと問題なく動くのですが、(エミュレータ の RAM はプログラムのロードと同時に初期化できるから)、ROMに焼くと、 (RAM の情報まで、ROM には持たせられないので)動かなくなるという 障害につながります。 あと、関数内の、static な配列の初期化も同様です。 あと、今調べたら、auto 変数でも配列の初期化はまずいみたいですね。 -- _/ -- Last 17579 hours until ATHENS 2004 Olympic Games (12 Aug @292) - _/ FUJIHARA Keiichi _/ E-Mail : keiichi@xxxxxxxxxxxxx <or> nagi@xxxxxxxxxxxxxxx _/ URL : http://www.keiichi.fujihara.name/ --------------------------------------------+----- Luna Phase 3.93 -- PGP FingerPrint = 7CC3 4F95 8CC7 87D3 7178 C348 CD65 7F08 D68F 69F6