Ich muss eine Reihe von einzelnen Wortleitungen aus einer Datei in ein Array laden, also habe ich eine Funktion dafür gemacht. Die Funktion nimmt char*** arr
als Parameter, der ein Zeiger auf das Array von Zeichenfolgen ist. Ich reserviere Speicher und habe dann diese Schleife, um Wörter in das Array zu laden.C: Letztes Element in char * Array überschreibt alle Array-Einträge
i=0;
FILE *fp = fopen(filename, "r");
while(fgets(tok, WORD_BUFFER, fp) != NULL){
(*arr)[i] = tok;
printf("Word %d:%s", i, (*dict)[i]);
i++;
}
//arr is a char***, tok is a char[WORD_BUFFER], and WORD_BUFFER is 50
Mein Problem ist, dass diese mit jedem Eintrag des Arrays zu sein scheinen zu überschreiben, was ich versuche zu Eintrag eingeben [i]. Ich sage das, weil der Ausgang der Schleife oben für eine Datei, die etwa wie folgt aussieht:
A
B
C
D
scheint richtig zu drucken, aber wenn ich das Array in der Hauptfunktion drucken (oder auch nur später in dieser Funktion) , druckt es aus wie:
D
D
D
D
ich vermute, es hat etwas mit meiner Verwendung von fgets
oder der Zuordnung von (*arr)[i] = tok
aber ich bin nicht sicher, zu tun. Danke!
Nach dieser Aussage (* arr) [i] = tok; Alle Elemente des Arrays haben den gleichen Wert der Variablen tok, –
Warum ist das? Warum sollte es nicht nur den Wert von Tok ausmachen? – Jeb
Sie tun nur eine Zeigerzuweisung mit dem Operator '='. 'tok' wird mit jeder Datei überschrieben, die sich in der Schleife befindet. Also zeigt alles auf 'tok', was die letzte aus der Datei gelesene Zeile ist. Sie müssen ['strcpy'] (https://linux.die.net/man/3/strcpy) die Daten von' tok' zu einem anderen Ziel jedes Mal durch die Schleife, wenn Sie es speichern möchten. – yano