Christian Seiler: (C) Dateilängenüberprüfung bei absolutem Pfad fehlerhaft

Beitrag lesen

Hallo Markus,

Ja, aber da habe ich wieder das Problem, mit dem ich seit geraumer Zeit  kämpfe. Irgendwie verstricke ich mich immer in dieses Henne-Ei-Problem. Wenn der Puffer eine dynamische Größe haben soll, muss ich doch zuerst wissen, wie groß diese Größe ist? Um das zu erfahren, muss ich doch erst wieder, um auf Nummer Sicher zu gehen, ein überdimensional großes Array definieren um diesen übergebenen String auf die Länge überprüfen zu können.

Nein, wieso? Du kannst den Puffer doch im Heap ablegen und dann dynamisch wachsen lassen. Wenn Du's allgemein machen willst: Du kannst Dir doch eine Sturktur erstellen, die 3 Einträge enthält:

typedef struct {  
  char *inhalt;  
  size_t laenge;  
  size_t puffergroesse;  
} zeichenkette;

laenge speichert dabei die tatsächliche Stringlänge, puffergroesse speichert, wie viel davon bereits allokiert wurde. Diese Struktur kannst Du dann initialisieren, indem Du inhalt auf NULL setzt, laenge ud puffergroesse auf 0. Wenn Du dann etwas anhängen willst, dann prüfst Du, ob laenge + Länge das Anzuhängenden + 1 (die Eins wegen dem 0-Byte) größer sind als die Puffergröße - wenn ja, nutzt Du realloc(), um den Puffer neu anzulegen mit einer größeren Puffergröße (die mind. so groß ist wie laenge + Länge des Anzuhängenden + 1, Du kannst aber auch um eine bestimmte feste Blockgröße vergrößern - es hängt vom Anwendungsfall ab, was besser geeignet ist), speicherst die neue Puffergröße in Deiner Struktur. Wenn Du damit fertig bist (oder der Puffer vorher schon groß genug war), hängst Du per memcpy() o.ä. den Inhalt des anzufügenden an den Inhalt Deiner Struktur an und erhöhst laenge um die Länge des Angehängten.

Aber der Aufwand wäre hier doch gar nicht notwendig IMHO. Du hast doch den Pfad schon vorher in einer Variablen - da kannst Du doch die Länge bestimmen und weißt, wie groß Dein Puffer sein soll? Werde mal etwas konkreter, was für ein Puffer bei Dir überlaufen könnte.

Viele Grüße,
Christian

--
"I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup