0

構造体の配列へのポインタにメモリを割り当てようとしていますが、奇妙なエラーが発生します。コードは次のとおりです。

struct command{
    int type;
    char* input;
    char* output;
    struct command *command[2];
}

配列サイズ 2 にメモリを割り当てようとすると、次のようにします。

temp->command = (command*)malloc(sizeof(struct command[2]));

ただし、次のエラーが発生しました。

incompatible types when assigning to type âstruct command *[2]â from type âstruct command *â

なにか提案を?

4

3 に答える 3

3

commandtype へのポインタの 2 要素配列として宣言したため、次のように配列要素ごとに、 arraystruct commandにメモリを割り当てる必要はありません。

temp->command[i] = malloc( sizeof *temp->command[i] );
于 2013-07-02T17:58:53.313 に答える
1

あなたはこのようにする必要があります

for(i=0;i<2;i++)
   temp->command[i] = malloc(sizeof(struct command[i]));
于 2013-07-02T16:36:53.917 に答える
0

要素を構造体の配列へのポインターにしたい場合は、次のように宣言して割り当てることができます...

struct command (*command)[2]; /* note the parentheses */

temp->command = malloc(sizeof *temp->command);

...そして、要素をポインタの配列にしたい場合は、次のようにすることができます:

struct command *command[2]; /* equivalent to *(command[2]) */

temp->command[0] = malloc(sizeof *temp->command[0]);
temp->command[1] = malloc(sizeof *temp->command[1]);

(「ポインタの配列」と「配列へのポインタ」を判断する良い方法は、演算子の優先順位と結合規則に従って、変数名から外側に向かって作業することです。たとえば、宣言が「sometype *myvar[ [] は * よりも優先順位が高いため、「myvar は ... へのポインターです」ではなく、「myvar は ... の配列です」で開始します。)

エラーメッセージは、キャストが type->command が構造体へのポインターであることを示したためでした。これは、構造体へのポインターの配列として宣言したため、競合していました。ただし、C++ コンパイラを使用していない限り、キャストする必要はありません。

于 2013-07-02T20:29:40.510 に答える