[H8-ML(2149)] Re: 型変換に関して
From: FUJIHARA Keiichi <keiichi@xxxxxxxxxxxxx>
Date: 2002年08月12日(月)15時07分47秒
 藤原と申します。

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


スレッド概略
[2132(R)](起点)
 └[2145(U)]
   └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]