- Mitglied seit
- 04.08.2002
- Beiträge
- 1.869
- Reaktionen
- 0
Eine knifflige Frage. Habe lange erfolglos nach ner Lösung gesucht, aber vielleicht hat hier ja jemand ne Idee. Geht um folgende Funktion:
void logMessage(const std::string& strFormat, ...)
{
char acBuffer[strFormat.length() + 1024];
va_list argList;
va_start(argList, strFormat);
vsprintf(acBuffer, strFormat.c_str(), argList);
va_end(argList);
//...
}
Wie man sieht, arbeitet die Funktion im Prinzip wie printf - sie erwartet einen Format-String und ne variable Liste von Argumenten und baut daraus dann einen finalen String zusammen, mit dem man dann weiterarbeiten kann.
Das Problem ist nun folgendes: Wie man sieht, setze ich die Buffer-Size oben fest auf (Länge des Format-String + 1024). Das knallt natürlich sofort, sobald die zusätzlichen Argumente mal etwas länger werden.
Hat jemand ne Idee, wie ich vorher rausbekommen kann, wieviel Speicher ich allokieren muss?
void logMessage(const std::string& strFormat, ...)
{
char acBuffer[strFormat.length() + 1024];
va_list argList;
va_start(argList, strFormat);
vsprintf(acBuffer, strFormat.c_str(), argList);
va_end(argList);
//...
}
Wie man sieht, arbeitet die Funktion im Prinzip wie printf - sie erwartet einen Format-String und ne variable Liste von Argumenten und baut daraus dann einen finalen String zusammen, mit dem man dann weiterarbeiten kann.
Das Problem ist nun folgendes: Wie man sieht, setze ich die Buffer-Size oben fest auf (Länge des Format-String + 1024). Das knallt natürlich sofort, sobald die zusätzlichen Argumente mal etwas länger werden.
Hat jemand ne Idee, wie ich vorher rausbekommen kann, wieviel Speicher ich allokieren muss?
