gpt4 book ai didi

c - 如何在 C 中的结构中设置一个字符?

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:44 25 4
gpt4 key购买 nike

如何为结构内的 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;

这是函数 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]);
}
}

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

中打印 flag 时,也会发生同样的情况

我想那是因为我没有正确地为 Insere() 中的 flag 分配内存空间,对吗?我该如何解决?

我很确定这是一个非常简单的问题,而且我可能曾经知道这一点,但我忘记了并且无法在任何地方找到它......所以任何帮助将不胜感激

编辑

根据 ocdecio 的提示,我创建了一个指向二维数组的指针,以便拥有一个动态的 3 维数组。
我的目标是有一个像这样的“表”:

  10 chars | 10 chars  
|__________|__________|
|__________|__________|
|__________|__________|

行数是动态的,但它始终是 2 个 10 个字符的字符串的数组。

所以现在这就是我在 main 中所做的:

    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);

但这行不通...
这是从文件中读取的输入

adsasdfg2: (abc,123) (def,456) (ghi,789);

但即使在我调用 Insere 之前,我也没有按照我想要的方式为 instrucao 分配正确的值,因为这是 printf< 的输出

123
454
789

而不是我的目标

123
456
789

怎么了?

(在有人问之前,这是作业的部分,但不是作业的。我的任务是制作确定性有限自动机最小化器,这只是一个错误我与数据输入有关)

非常感谢

最佳答案

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

realloc(NovoEstado->instrucao, i+1*sizeof(char[2][10]));

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

关于c - 如何在 C 中的结构中设置一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1024030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com