fehlerhafte Werte im zweidimensionalen Array



  • Hallo,

    ich habe eine Funktion geschrieben, welche eine Transitionstabelle einlesen soll. Klappt soweit alles ganz gut, zumindest wenn ich es direkt beim auslesen ausgebe. Sobald ích das Feld nochmals Ausgebe, steht dort nicht mehr das Richtige.

    int initAutomat(string automat[ZEILEN][SPALTEN])
    {
    	char line[300];
    	int i, j;
    
    	FILE *datei;
    	datei = fopen("testAutomat.txt", "r");
    
    	if(datei != NULL)
    	{
    		for(i=0; i < ZEILEN; i++ )
    		{
    			fgets(line, sizeof(line), datei);
    			automat[i][0].wert = strtok(line, "\t");
    			printf("%s\t", automat[i][0].wert);
    
    			for(j = 1; j < SPALTEN - 1; j++)
    			{
    				automat[i][j].wert = strtok(NULL, "\t");
    				printf("%s\t", automat[i][j].wert);
    			}
    			printf("\n");
    
    		}
    
    		// Ausgabe Automat zur Kontrolle
    		for(i = 0; i < ZEILEN; i++)
    		{
    			printf("\n");
    			for(j = 0; j < SPALTEN - 1; j++)
    				printf("%s\t", automat[i][j].wert);
    		}
    
    	}
    	else
    	{
    		printf("Automat konnte nicht initialisiert werden. Datei nicht gefunden oder fehlerhaft.");
    		return -1;
    	}
    
    	return 1;
    

    Das ist die Ausgabe von der Funktion. Wie man sehen kann, stimmen die Werte beim auslesen und werden auch an der entsprechenden Stelle im Array gespeichert. Aber wenn ich das Array dann nochmals ausgebe, erscheint die zweite Ausgabe. Entweder sehe ich was Triviales gerade nicht oder ich weiß auch nicht. Hat wer dafür eine Erklärung?

    fkt
    fkt	a	b	c	
    q0	c1	c1	q0	
    c1	c1	q0	c1	
    c2	q0	trap	c2	
    
    c2	0	trap	ap	
    c2	q0	trap	p	
    c2	q0	trap	p	
    c2	q0	trap	c2
    

    PS: Der Automat ist natürlich Murks. Ist nur zum testen schnell geschrieben.



  • Wie ist denn string definiert?
    Als char* ?

    Hier automat[i][0].wert = strtok(line, "\t"); weist du automat[i][0].wert nicht den Inhalt zu (den strtok gefunden hat) sondern den Zeiger auf die Fundstelle in line.

    Beim nächste lesen mit fgets(line, sizeof(line), datei); wird der Inhalt von line natürlich überschrieben. Somit verweist automat[i][0].wert auf einen anderen Inhalt.



  • Erstmal vielen Dank für die schnelle Antwort.

    Stimmt, hatte ich garnicht bedacht, dass ich ja nur die Adresse zuweise.

    Mein string ist so definiert.

    typedef struct
    {
    	char *wert;
    
    }string;
    


  • Jetzt brauchst du nur noch Platz für den Text.
    malloc (oder calloc) ist dein Freund.

    Aber am Ende das free nicht vergessen.



  • Super. Funktioniert jetzt. Vielen Dank!

    Grüße



  • Das ging ja schnell.
    Hast du auch an die '\0' am Ende vom String gedacht?


Anmelden zum Antworten