R
columbus schrieb:
WÜrde es helfen die ganze Funktion 'lese_datei' static zu >machen< bzw nur die Variable zeiger?
Das Problem ist das Array ausgabe_zeile, das lokal ist und danach nicht mehr existiert, zeiger static zu machen bringt dir daher nichts, du müsstest schon das Array static machen.
Du könntest andererseits z.B. in der aufrufenden Funktion ein Array anlegen und dessen Adresse an die Funktion lese_datei übergeben (und die Arraygröße):
int scanner(FILE* eingabe_datei)
{
...
char zeile[20];
...
lese_datei(zeile, 20, eingabe_datei);
...
fputs(zeile, stdout);
}
In der Funktion lese_datei nimmst du die Parameter dann einfach her:
// Code nach K&R
int lese_datei(char* zeile, int len, FILE* datei)
{
if(fgets( zeile, len, datei)==NULL)
return 0; // Dateiende
else
return strlen(line); // Länge d. Zeile
}
Aber mach das Ganze doch einfach so:
int scanner(...)
{
char zeile[ZEILE_LEN];
...
while(fgets(zeile, ZEILE_LEN, eingabe_datei))
fputs(zeile, stdout);
...
}
Beim Vergleich mit NULL musst du aufpassen weil ein NULL-Zeiger auch beim Dateiende zurückgegeben wird...