Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!onodera-news!newsfeed.media.kyoto-u.ac.jp!newsfeed.mesh.ad.jp!t-newsgw1.odn.ne.jp!nwall.odn.ne.jp!not-for-mail From: IIJIMA Hiromitsu Newsgroups: fj.comp.lang.c Subject: Re: =?iso-2022-jp?B?GyRCOT1CJEJOJE4lYSVzJVAkTjUtMjEwaCROPWcbKEI=?= Date: Fri, 22 Aug 2003 23:38:24 +0900 Organization: DENNOU GEDOU GAKKAI, N. D. D. http://www.dennougedougakkai-ndd.org Lines: 49 Message-ID: <3F462AE0.BAEB147E@ht.sakura.ne.jp> References: <871xve8046.wl@anago2.mas.chi.its.hiroshima-cu.ac.jp> NNTP-Posting-Host: eatcf-118p95.ppp15.odn.ne.jp Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit X-Trace: nwall2.odn.ne.jp 1061563131 63311 218.218.205.95 (22 Aug 2003 14:38:51 GMT) X-Complaints-To: news@odn.ad.jp NNTP-Posting-Date: Fri, 22 Aug 2003 14:38:51 +0000 (UTC) X-Mailer: Mozilla 4.78 [ja] (Win98; U) X-Accept-Language: ja,en,zh-TW,zh,zh-CN,de,es,ko Xref: ccsf.homeunix.org fj.comp.lang.c:39 いいじまです。 > > 構造体のメンバの記憶域は並べられた順に割り当てらることとなっていますが、 > > これには何か理由がありますか。 > > struct foo { > int a; > int b; > int c; > char s[1]; > }; > > のように構造体を宣言しておいて、任意の長さの領域を > malloc()してからstruct foo *にキャストして使うなん > てことをむかしのプログラムはよくやってました。つま > りsに任意の長さの領域を割り当てたいからです。 昔どころか…Windows ではいまだに現役ですよ(笑) とはいっても、可変長の構造体というのはこんな使い方↓をするのが普通ですが。 HOGE *pHoge=malloc(sizeof HOGE); pHoge->dwSize = sizeof HOGE; result = GetSomething(pHoge); if (result == NULL) // 領域不足、dwSize に必要サイズが返される { pHoge = realloc(pHoge, pHoge->dwSize); result = GetSomething(pHoge); } 構造体 HOGE のサイズが Windows のバージョンアップとともに増えていくので、 古いコンパイラでコンパイルしたコードが新しいバージョンの Windows でも動 くようにするために、こういうトリックを使います。 逆に、SetSomething(pHoge) なんてコードを書くと、先頭の pHoge->dwSize バ イトだけが認識されて、その先の領域(古いコンパイラでは領域確保されていな いため、ゴミが入っている)は無視されます。 ======================================================================== 飯嶋 浩光 / でるもんた・いいじま http://www.ht.sakura.ne.jp/~delmonta/ IIJIMA Hiromitsu, aka Delmonta mailto:delmonta@ht.sakura.ne.jp ───【宣伝/ADVERTISEMENT】────────────────────── fj.os.ms-windows.server2003 または fj.os.ms-windows.server の新設の可否 を問う投票を実施中です。 fj.news.group.comp をご参照のうえ、ふるってご投票ください。 投票期限は 8/25(月)です。 ────────────────────────────────────