0
typedef struct trans * Trans;

typedef struct state{
    int f;
    char  label[20];
    trans * TrasitionsArray[10];
}state;

struct trans{
    state * from;
    state * to;
    char  label;
};

void main(){
    state  StatesArray[100];
}

(state --- tratition --- to --- label)の値を指定するにはどうすればよいですか?

私はこれを試しましたが失敗しました:

strcpy(StatesArray[i].TrasitionsArray[j]->to->label,"blahblah");
4

3 に答える 3

0

state StatesArray[100];状態の構造体メンバーにメモリのみを割り当てます。10個の構造体変数TrasitionsArrayを保持するために10*4バイト(32ビットm / cのポインタのサイズ)のみを割り当てます。ただし、構造体変数Transitionのメンバーにはメモリが割り当てられていません。transition同様にfromto構造変数についても同様です。

内部ポインタ変数の割り当てには、以下のサンプルコードを使用してください。

int i, j; 
struct state states[100]; 
for (i = 0; i < 100; i++) 
{     
    for (j = 0; j < 10; j++)
    {
        StatesArray[i].TrasitionsArray[j] = (struct trans*)malloc(sizeof(struct trans));   
        StatesArray[i].TrasitionsArray[j]->from = (struct state *)malloc(sizeof(struct state));
        StatesArray[i].TrasitionsArray[j]->to = (struct state *)malloc(sizeof(struct state));
    }
}

注:NULLの戻り値のチェックに注意してくださいmalloc

于 2012-06-21T08:49:57.410 に答える
0

最初にメモリを割り当てる必要があります。配列へのすべてのポインタが初期化されていません。

int i, j;
struct state states[100];
for (i = 0; i < 100; i++)
{
    states.transitionsArray = (struct trans*)malloc(sizeof(struct trans)*10);
    for (j = 0; j < 10; j++)
    {
        // set 'from' and 'to' pointers here
    }
}

ところで:私はあなたが意味したと思いましたstruct trans * trasitionsArray;

于 2012-06-20T22:41:40.523 に答える
0

の配列のみを割り当てたため、できませんstate。構造体にはのstate配列へのポインタがありますが、transその配列を割り当てたことはありません。

配列を割り当てる行の後で、StatesArrayその配列を反復処理しTransitionsArray、各の要素にメモリと値を割り当てる必要がありますstate

于 2012-06-20T22:30:10.933 に答える