va_start - va_end - va_arg



  • Hi,

    ich habe mir ein printf gebaut um string Teil zu ersetzten.
    Das ganze gehört zu einem Localisation Module.

    Meine Frage bezieht sich auf folgendes Beispiel (von dem ich mein printf abgeleitet habe):

    #include <stdio.h>
    #include <stdarg.h>
    
    void PrintLines ( char* first, ...)
    {
      char* str;
      va_list vl;
    
      str=first;
    
      va_start(vl,first);
    
      do {
        printf ("%s\n",str);
        str=va_arg(vl,char*);
      } while (str!=NULL);
    
      va_end(vl);
    }
    
    int main ()
    {
      PrintLines ("First","Second","Third","Fourth",NULL);
      return 0;
    }
    

    Kann man das irgendwie hinbekommen, das kein NULL am ende übergeben werden muss?



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Indem du die Anzahl als Parameter mitgibst.

    printf macht dies indirekt über die Formatierungszeichen im Format-String. Was natürlich unsicher ist. Genau wie sich darauf zu verlassen das die angegebene Parameterzahl mit den tatsächlichen Paramtern übereinstimmt.



  • ok, dann kann ich das auch bei dem NULL belassen...

    Danke für die Antwort!



  • Der_Knob schrieb:

    Kann man das irgendwie hinbekommen, das kein NULL am ende übergeben werden muss?

    hi

    irgendwie musst du doch sagen, wo die Liste aufhört. Das ist das Problem mit Ellipsen. Ob du am Ende NULL oder die Anzahl von Parametern übergibst, ist eh egal. Die Funktion muss aber irgendwie diese Anzahl von Parametern bekommen.


Log in to reply