009
22.10.2003, 10:45 Uhr
virtual
Sexiest Bit alive (Operator)
|
Ja, das war von mir jetzt nicht großartrig getestet. Das hier auch nicht, aber ich denke, so gehts was besser:
C++: |
void use_dat(FILE *myDatei) { char* inhalt = (char*)malloc(4096); int len = 0; int read_len = 0; if (NULL == inhalt) { PaMessage::Info("Fehler 1"); } do { read_len = fread(inhalt+len, 4095, 1, myDatei); if (read_len == 4095) { char* ptr = (char*)realloc(inhalt, len + 4096); if (ptr==NULL) { free(inhalt); PaMessage::Info("Fehler 2"); }
} }while (read_len==4095); inhalt[len] = 0; fclose(myDatei); //Hier bearbeite ich den String free(inhalt); }
|
Zitat: |
Das was ich daran gar nicht verstehe, warum muss man Ihnalt eine feste Speichergröße am Anfang zuweisen???
|
Was würde denn passieren, wenn Du es nicht tun würdest? - Dann würdest Du fread machen, aber wohin soll den gelesen werden? Du brauchst immer Speicher, wenn du fread machst. Ob der nun gemalloc'd oder statisch ist, ist egal, solange er da ist. In unserem Fall müssen wir aber malloc machen, weil die Schleife den Speicher vergrößern muß, das geht nicht mit statischen Puffern -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |