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---trasition---to---label) 赋值

我试过这个但失败了:

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

3 回答 3

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

你不能,因为你只分配了一个states 数组。该state结构有一个指向数组的指针trans,但您从未分配过该数组。

在分配StatesArray数组的行之后,您需要遍历该数组并将内存和值分配给TransitionsArrayeach 中的元素state

于 2012-06-20T22:30:10.933 回答
0

state StatesArray[100];只会为状态的结构成员分配内存。它将仅分配 10 * 4 字节(32 位 m/c 中的指针大小)TrasitionsArray来保存十个Transition结构变量。transition但是没有为结构变量的成员分配内存。同样for fromandto结构变量也一样。

使用下面的示例代码分配内部指针变量。

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 回答