如何在C中的结构中设置char?

Gab*_*abe 1 c malloc data-structures

如何为struct中的char变量(不是char指针)分配内存?
(变量名称是葡萄牙语,抱歉,如果它有点令人困惑)

我有这个结构:

typedef struct node{
    char rotulo[10], instrucao[1][2][10], flag;
    int simplificado;

    struct node *referencias[2];
    struct node **antecessores;
    int nrAntecessores;

    struct node *ant;
    struct node *prox;
} Estado;
Run Code Online (Sandbox Code Playgroud)

这是insere()一个设置从新节点中的输入文件读取的值的函数:

void Insere(char *rotulo, char instrucao[][2][10], int qtdInstrucao, char flag){
    int i,j;
    Estado *NovoEstado;
    NovoEstado = (Estado*)malloc(sizeof(Estado));
    NovoEstado->prox = NULL;
    NovoEstado->ant = P->ult;
    strcpy(NovoEstado->rotulo, rotulo);
    NovoEstado->flag = flag;
    NovoEstado->antecessores = NULL;
    NovoEstado->nrAntecessores = 0;
    NovoEstado->simplificado = 0;

    for(i=0;i<qtdInstrucao;i++){
        realloc(NovoEstado->instrucao, i+1*sizeof(char[2][10]));
        strcpy(NovoEstado->instrucao[i][0], instrucao[i][0]);
        strcpy(NovoEstado->instrucao[i][1], instrucao[i][1]);
    }
}
Run Code Online (Sandbox Code Playgroud)

NovoEstado->flag = flag;是行不通的...
在我设置它之后,如果我打印NovoEstado->flag我得到了正确的值,但是如果我for在函数结束之后把它放在那里,当我打印时NovoEstado->flag我得到了NovoEstado的第一个字符 - > rotulo ...
当我尝试打印时flag也是如此main()...

我想,那是因为我没有正确地分配内存空间flagInsere(),是这样吗?我该如何解决?

我很确定这是一个非常简单的问题,而且我可能只知道这一次,但我忘记了,无法在任何地方找到它......所以任何帮助都会非常感激

编辑

在ocdecio的提示之后,我创建了一个指向二维数组的指针,以便有一个dinamic 3维数组.
我的目标是拥有一个像这样的"桌子":

  10 chars | 10 chars  
|__________|__________|
|__________|__________|
|__________|__________|
Run Code Online (Sandbox Code Playgroud)

线的数量是dinamic,但它总是由10个字符串组成的2个字符串.

所以现在这就是我在做的主要内容:

    char estado[127], rotulo[10], strInstrucoes[117], *conjunto = calloc(21, sizeof(char)), flag;
    char (*instrucao)[2][10];

    FILE * entrada;
    Automato *Aut = (Automato*)malloc(sizeof(Automato));

    if((entrada = fopen(argv[1], "r")) != NULL){
        CriaAutomato(Aut);
        while(fgets(estado, 127, entrada)){
            flag = 0;
            sscanf(estado,"%[^:]: %[^;]; %c", rotulo, strInstrucoes, &flag);
            instrucao = calloc(1, sizeof(char[2][10]));
            conjunto = strtok(strInstrucoes,"() ");
            for(i = 0; conjunto != NULL; i++){
                realloc(instrucao, i+1*sizeof(char[2][10]));
                sscanf(conjunto,"%[^,],%s", instrucao[i][0], instrucao[i][1]);
                printf("%s || %d\n", instrucao[i][1], i);
                conjunto = strtok(NULL, "() ");
            }
            Insere(Aut, rotulo, instrucao, i, flag);
            free(instrucao);
        }
        fclose(entrada);
Run Code Online (Sandbox Code Playgroud)

但这不起作用......
这是从文件读取的输入

adsasdfg2: (abc,123) (def,456) (ghi,789);
Run Code Online (Sandbox Code Playgroud)

但即使在我打电话之前,我并Insere没有instrucao按照我想要的方式分配正确的值,因为这是它的输出printf

123
454
789
Run Code Online (Sandbox Code Playgroud)

而不是我的目标

123
456
789
Run Code Online (Sandbox Code Playgroud)

怎么了?

(有人问之前,这是部分一门功课,但不是功课.我的任务就是让一个确定有限自动最小化,这只是我越来越相关数据输入错误)

非常感谢

Otá*_*cio 7

您的问题很可能出在这一行:

realloc(NovoEstado->instrucao, i+1*sizeof(char[2][10]));
Run Code Online (Sandbox Code Playgroud)

不需要在结构中分配任何内容,因为该字段instrucao由语句静态定义instrucao[1][2][10],它不是动态分配的结构.