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


Anmelden zum Antworten