Funktion ladet die Datei nur inerhalb der Funktion ?
-
Hallo,
erstmal der Quellcode zu meiner Frage :#include <stdio.h> #include <stdlib.h> #include <string.h> enum { SUCCESS=0, ERROR}; int load(FILE *datei,char *file_name,size_t *file_size){ datei=fopen(file_name,"r"); if(datei == NULL) return ERROR; fseek(datei,0,SEEK_END); *file_size=ftell(datei); fseek(datei,0,SEEK_SET); return SUCCESS; } void strfit(char *string){ int i=1; while(string[i]!='\n' && string[i]!='\0') i++; if(string[i]=='\n') string[i]='\0'; } int main(int argc, char *argv[]) { FILE *datei=NULL; size_t file_size=0; char puffer[80]={0}, *file_name; strcpy(puffer,"test.txt"); /* entfernen */ while(load(datei,puffer,&file_size)){ printf("-!- Datei konnte nicht gefunden werden.\n"); printf("\nDatei:"); fgets(puffer,80,stdin); strfit(puffer); } /* puffer in file_name kopieren */ file_name=malloc(sizeof(char)*strlen(puffer)+1); strcpy(file_name,puffer); printf("-\001-Datei gefunden:%s (%d %sByte)\n",file_name,(file_size>1024)? file_size/1024:file_size,(file_size>1024)?"K":""); system("PAUSE"); return 0; }
Nun hab ich folgendes Problem, außerhalb der Funktion load, kann ich die Datei nicht ansprechen ( zum Beispiel ein Zeichen lesen mit fgetch() );
Als ich den FileZeiger in der main Funktion untersuchte, stellt ich fest, dass die Adresse auf die er zeigt unverändert nach dem Funktionsaufruf von load bleibt?EDIT: Ich bekomme keine Compiler Fehler.
Was mache ich falsch ?
MfG
sam_sam
-
Der Parameter 'datei' ist eine lokale Kopie der Variablen aus dem Hauptprogramm - das heißt, wenn du den änderst, hat das keine Auswirkungen nach außen. Um die Variable des Hauptprogramms ändern zu können, mußt du einen Zeiger auf sie übergeben:
int load(FILE** datei,...) { *datei=fopen(...); ... } int main() { FILE* datei = NULL; ... if(load(&datei,...)) ... }
-
vielen, vielen Dank CStoll!
der Zeiger in der Funktion load sieht also so aus:
**datei:
eigene Adresse -> Adresse von datei in main -> Wert von *dateiist das so richtig ?