stdarg: Alle (variabeln) Argumente in einem Buffer speichern
-
Saluti
Ich möchte von formatstrings wie bei printf profitieren und alles in einem Buffer speichern, versucht habe ich folgendes:
//aufruf: collectPrintf("%s %s %s", "Ha", "l", "lo"); //funktion: void collectPrintf(char *text, ...) { char *buffer; va_list args; va_start(args, text); buffer = (char*)malloc(4096); //Wie kann ich das besser lösen? vsprintf(buffer, "%s", args); //nur zum testen ob der buffer stimmt printf("%s\n", buffer); //ich krieg immer "ha" va_end(args);
Merci
-
Du könntest mit dem folgenden Code durch alle Args gehen, deren Länge bestimmen, dann für buffer Speicher bereitstellen und dort reinschreiben
const char *ptr = text; unsigned int len = 0; char *buffer; va_start(args, ptr); for(; ptr; ptr = va_arg(args, const char *)) len += strlen(ptr); va_end(args); va_start(args, text); buffer = malloc(len + 1); vsprintf(buffer, "%s", args); va_end(args);
Ka, ob das funktioniert (habs nicht getestet) bzw. ob das besser ist, aber was besseres fällt mir nicht ein.
Versuch es mal mit vsprintf(buffer, text, args); Du brauchst ja noch alle Formatstrings, nicht nur "%s".
-
hi feigling,
Vielen Dank für deinen Support. Es klappt super! Wieso es klappt werde ich jetzt analysieren
grz Variabler