einzelnen buchstaben an einen string anhängen
-
KC schrieb:
allerdings: wenn ich den code abändere und nur bestimmte teile der datei parsen wollen würde, oder ein abbruchkriterium während des parsens hätte, wäre der restliche speicher ja umsonst alloziert worden !?
naja, wenn das ein problem ist, dann musste zweimal parsen. beim ersten mal die länge ermitteln und beim zweiten mal einlesen...
-
hmm, ich weiß nicht, ob ich dich da jetzt richtig verstehe...du würdest also das erste mal durch das file gehen um zu "errechnen" wieviele bytes ich brauche, und danach diesen speicher allozieren, und anschließend die entsprechenden bytes auslesen? *kopfkratz* denn die größe der gesamten datei kenne ich ja dank deines code-schnibbsels nun schon...
-
KC schrieb:
hmm, ich weiß nicht, ob ich dich da jetzt richtig verstehe...du würdest also das erste mal durch das file gehen um zu "errechnen" wieviele bytes ich brauche, und danach diesen speicher allozieren, und anschließend die entsprechenden bytes auslesen?
richtig, aber nur wenn der aufruf von malloc mit der gesamten dateigrösse aus irgendwelchen gründen ein echtes problem wird (weil die datei riesengross ist ect.).
:xmas2:
-
ok, dann habe ich dich doch richtig verstanden...
ich gehe zb mal von einem extrem-fall aus, dass das file 1mb oder 5mb groß ist, ich aber vielleicht nur wenige bytes extrahieren will, die wohlmöglich noch verstreut liegen...daher war meine idee halt, dass ich einfach immer nur dann speicher dazuhole, wenn mein parser was gefunden hat. und ich hätte nur einen durchlauf gehabt. letztendlich hat ja deine variante (so gut sie bei mir jetzt auch funktioniert) ja leider auch wieder diesen statischen charakter, wenn auch zumindest an das file angepasst...
-
Immer um ein Zeichen reallocen ist Schwachsinn. Merk dir die Größe des Buffers, wenn der Buffer voll ist verdoppelst seine Größe mit realloc.
-
TactX schrieb:
Merk dir die Größe des Buffers, wenn der Buffer voll ist verdoppelst seine Größe mit realloc.
wird ja oft so gemacht, aber stell dir vor du hast 200000 bytes im buffer, der buffer ist voll, er wird auf 400000 erhöht und dann kommt aber nur noch 1 byte
-
Manchmal will ich dich einfach nur hauen
-
naja, letztendlich scheint es am realloc zu scheitern, egal wann und um wieviel ich versuche temp_word zu "vergrößern"...
ich initialisiere mit:
temp_word=(char*)malloc(mybuffer);
und wenn es soweit ist versuche ich nachzuallozieren:
realloc(temp_word,mybuffer*2);
aber dann schmiert das programm mit ner fehlermeldung ab.
-
Hier wird realloc auch falsch benutzt bzw. kann es zu bösen Überraschungen führen wie segmentation fault. Realloc sollte man so benutzen
int groesse = ...; char *buffer, *tmp; buffer = malloc(groesse); /* ganz wichtig, sonst knallt's */ if(!buffer) /* Fehlerbehandlung, Abbrechen, was auch immer */ ... /* da wir mit char Arbeiten, brauchen wir das ganze sizeof(char) gar nicht, weil sizeof(char) immer 1 ist */ tmp = realloc(buffer, groesse + new_size); if(!tmp) /* realloc Fehler, Speichergröße kann nicht verändert werden!, Abbrechen */ buffer = tmp; /* ab hier ist es sicher auf buffer zuzugreifen */
-
aaaaah, ok, jetzt klappt's endlich, danke sehr