K.Maebashi's BBS 投稿フォーム
ハンドル名
件名
Link
>はじめまして。 > >>typedef struct{ >> char cString[50]; >> char *cpItem[]; //タイプ/処理名/置換先項目/置換元項目/デフォルト値/ >>}typChangePrm; > >まず質問ですが、コンパイラはなんでしょうか? >いわゆるANSI-C (ISO-C89)では上のコードは通りません。 >ISO-C99なら通ります。gccにも似たような独自拡張があったような。 > >>↑のような構造体の中のポインタ配列のreallocの方法がわからず苦戦しております。 > >で、単にcpItemを可変個確保したいだけなら、このページが参考になるでしょう。 > >http://seclan.dll.jp/c99d/c99d04.htm#dt19990726 > >確保するサイズは sizeof(typChangePrm) + sizeof(char*) * num ですね。 > >ただ、それ以前の問題として、こういう構造体をrealloc()する時は、 >「この構造体を指しているポインタはないか」ということを意識する必要があります。 >realloc()するとアドレスが変わることがあるため、これを指しているポインタがあると >そっちも書き換えてやらなければいけません。 > >それが難しいのなら、可変長構造体を使うのではなく、この構造体に >可変長配列へのポインタを持たせるべきでしょう。 > >typedef struct{ > char cString[50]; > char **cpItem; // この先の領域をrealloc()する。 >}typChangePrm; > ># ところでcpItemの数はどっかで保持してるんでしょうか。 >
spamよけのため、ここに「ほげぴよ」と入力してください。
削除パスワード :
クリック!