2012-06-24 16 views
7

Ich möchte so etwas wie dies tun:c function string formatiert Rückgabe

writeLog(printf("This is the error: %s", error)); 

so dass ich für eine Funktion suchen, die eine formatierte Zeichenfolge zurückgibt.

+8

nachschlagen 'snprintf'. –

+1

http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/ für sprintf – Mark

+0

Sorry, aber es scheint, als ob snprintf das selbe wie sprintf tut und die formatierte Zeichenkette in eine Variable setzt. Nach was ich suche, ist eine Funktion, die direkt die formatierte Zeichenkette zurückbringt. – Zulakis

Antwort

5

Gegeben, keine solche Funktion existiert, einen etwas anderen Ansatz betrachten: make writeLog printf-like, d. H. Nehmen Sie eine Zeichenfolge und eine variable Anzahl von Argumenten. Dann formatieren Sie die Nachricht intern. Dadurch wird das Speicherverwaltungsproblem gelöst und vorhandene Verwendungsmöglichkeiten von writeLog werden nicht aufgehoben.

Wenn Sie dies möglich zu finden, können Sie etwas in dieser Richtung verwenden:

void writeLog(const char* format, ...) 
{ 
    char  msg[100]; 
    va_list args; 

    va_start(args, format); 
    vsnprintf(msg, sizeof(msg), format, args); // do check return value 
    va_end(args); 

    // write msg to the log 
} 
+1

Danke für diesen guten Ansatz. Genau das, was ich gesucht habe. – Zulakis

5

Es gibt keine solche Funktion in der Standardbibliothek und es wird nie eine in der Standardbibliothek geben. Wenn Sie einen wollen, können Sie es selbst schreiben. Folgendes müssen Sie beachten: Wer wird den Speicher für die zurückgegebene Zeichenfolge reservieren und wer wird ihn freigeben? Wird es threadsicher sein oder nicht? Wird die maximale Länge der zurückgegebenen Zeichenfolge begrenzt oder nicht?