Wie reserviere ich Speicher für eine Char-Variable (kein Char-Zeiger) innerhalb einer Struktur?
(Variablennamen in portugiesisch sind, sorry, wenn es irgendwie verwirrend)Wie setze ich ein Zeichen in einer Struktur in C?
Ich habe diese Struktur:
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;
Und dies ist Funktion insere()
die abgelesenen Werte aus einer Eingabedatei in einem neuen Knoten setzt:
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]);
}
}
Diese NovoEstado->flag = flag;
nicht funktioniert ...
Gleich nachdem ich es gesetzt, wenn ich NovoEstado->flag
drucke ich den richtigen Wert zu erhalten, b ut, wenn ich es nach diesem for
durch das Ende der Funktion setzen, wenn ich NovoEstado->flag
drucken bekomme ich das erste Zeichen von NovoEstado-> Rótulo ...
Das gleiche passiert, wenn ich versuche, flag
in main()
zu drucken ...
Ich denke, das ist, weil ich nicht richtig Speicherplatz flag
in Insere()
reservieren, ist das richtig? Und wie repariere ich es?
Ich bin mir ziemlich sicher, dass es eine schreckliche einfache Frage, und dass ich possibily dies einmal wusste, aber ich habe vergessen, und kann es nicht überall ... So würde jede mögliche Hilfe sehr
EDIT geschätzt werden
Nach Ocdecios Tipp habe ich einen Zeiger auf ein zweidimensionales Array erstellt, um ein dynamisches 3-dimensionales Array zu haben.
Mein Ziel ist es, eine „Tabelle“ wie diese zu haben:
10 chars | 10 chars
|__________|__________|
|__________|__________|
|__________|__________|
Wo die Anzahl der Zeilen dinamic ist, aber es ist immer ein Array von 2 Strings von 10 Zeichen.
So, jetzt ist es das, was ich in Haupt tun:
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);
Aber das funktioniert nicht ...
Dies ist die Eingabe von Datei
adsasdfg2: (abc,123) (def,456) (ghi,789);
lesen ist aber auch Bevor ich rufe Insere
Ich bin nicht die richtigen Werte zu instrucao
die Art, wie ich will, da dies die Ausgabe von diesem printf
123
454
789
statt dessen, was ich bin mit dem Ziel für
123
456
789
Was ist los?
(bevor jemand fragt, ist dies Teil eine Hausaufgabe, aber nicht die Hausaufgaben.Meine Aufgabe ist es, eine deterministische Finite Automata minimizer zu machen, das ist nur ein Fehler, den ich auf der Dateneingabe im Zusammenhang bin immer)
Dank einer ganze Menge
Nein, das ist es nicht. Wenn Sie ein Malloc (sizeof (Estado)) machen, vergeben Sie Platz für Flag. – Macarse