Ich versuche zu lernen, wie Speicher dynamisch für sehr lange Zeilen zugewiesen wird, wenn ich eine Datei lese. Ich suche hier und im Web und ich habe versucht, etwas Code.Eine Zeile aus einer Textdatei dynamisch lesen
Zum einen ist hier meine erste nicht-dynamischen Code:
char line[256];
file = fopen(inputFileName, "r");
// Here, of course I checked file is opened or not.
while (fgets(line, sizeof(line), file)) {
// do some operations
}
// Closing operations
Dies funktioniert für mich, wenn ich Dateien zu lesen. Aber hier muss die Zeile gleich oder kleiner als 255 Zeichen sein. Also, ich möchte zum Beispiel 300 Zeichen Länge Zeile aus der Datei lesen.
Ich habe versucht, Code folgende:
size_t maxl = 256;
//char line[256];
char *line = malloc(maxl * sizeof(char));
if(!line){
printf("Memory not allocated!!\n");
return -2;
}
file = fopen(inputFileName, "r");
while (fgets(line, sizeof(line), file)) {
while(line[strlen(line) - 1] != '\n' || line[strlen(line) - 1] != '\r'){
char *tmp = realloc (line, 2 * maxl);
//fgets(line, sizeof(line), file);
if (tmp) {
line = tmp;
maxl *= 2;
}
else{
printf("Not enough memory for this line!!\n");
return -3;
}
}
// do some operations
}
Ich habe versucht, Antworten auf diese Frage tatsächlich zu implementieren: Reading a line from file in C, dynamically
Aber es immer geben „Nicht genügend Speicher“ Teil des Codes. Also, was mache ich falsch?
Vielen Dank schon für Ihre Antworten und Hinweise.
Edit: Code aktualisiert ist abhängig von ersten Kommentaren.
Edit 2: Code wird immer gleich 3 Zeichen aus der Datei gelesen.
Stellen Sie sich vor, dass die Datei wie ist:
abcdabcdabcd...
Die line
Variable immer "abc" ist auch nach der erneuten Zuweisung Betrieb.
Ihre while-Schleife wird nur beendet, wenn Sie neuen Text aus der darin enthaltenen Datei lesen, aber nicht. – Ryan
Mögliches Duplikat von [Wie finde ich 'sizeof' (ein Zeiger, der auf ein Array zeigt)?] (Http://stackoverflow.com/questions/492384/how-to-find-the-sizeofa-pointer-pointing-to -an-array) –
'sizeof (char *)' Falsch. Ordnen Sie ein Array von 'char *' zu? Nr. –