007
07.11.2003, 01:06 Uhr
0xdeadbeef
Gott (Operator)
|
Die einfachste Möglichkeit wäre wohl, C++ statt C zu benutzen und einfach vector zu nehmen, der übernimmt dann das Speichermanagement für dich. Damit bist du auf der sicheren Seite, deswegen empfiehlt sich das besonders in sicherheitskritischen Bereichen. Es kann allerdings u.U. mit Performance-Einbußen einhergehen, besonders, wenn du Vektoren als Rückgabewerte benutzt. Wenn das ein Ausschlußkriterium ist, musst du in C malloc/calloc benutzen, darfst allerdings free nicht vergessen. Ich für meinen Teil empfinde es als schönen Programmierstil, diese Dinge zu kapseln, eine übliche Praxis in C ist folgendes:
C++: |
void schreibe_etwas_in_den_buffer(char *buffer, size_t buflen) { /* ... schreib etwas in buf, aber nicht mehr als buflen Zeichen ... */ }
|
und nachher im Aufruf
C++: |
char buffer[100]; schreib_etwas_in_den_buffer(buffer, 100);
|
respektive
C++: |
inf buffer_lange; char *buffer; /*Die erforderliche Bufferlägne rauskriegen und in buffer_laenge speichern*/ buffer = (char*) malloc(buffer_laenge); schreib_etwas_in_den_buffer(buffer, buffer_laenge); /* ... */ free(buffer);
|
wenn die Länge des Buffers erst zur Laufzeit feststeht. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |