Problem mit Übergabe einer variablen Anzahl an Argumenten an eine Funktion



  • Hi!
    Ich habe folgendes Problem: Ich habe eine Funktion Vector, die eine Variable Anzahl an Elementen übernimmt. Leider erzeugt sie jedoch nicht 4 elemente (wenn ich ihr 4 gegeben habe) , sondern knapp 80 usw. Außerdem liefert der []operator der Klasse vector dann immer 1#.INDEF oder so ähnlich, sprich nonsense.

    Was habe ich hieran falsch gemacht? Eigentlich ist das Prinzip ja nicht allzu schwer - http://www-info2.informatik.uni-wuerzburg.de/dclc-faq/kap7.html
    hat mich auch nicht weitergebracht.

    struct vector
    {
        std::vector<long double> coords; 
        long double &operator [](unsigned int index)
        {
            if(index <coords.size()) return coords[index];
        }
    };
    
    vector Vector(long double arg1, ...)
    {
        vector res;
        va_list argptr;		
    
        va_start( argptr, arg1 );		
        long double x;
        while(x=va_arg( argptr, long double))
        {
          res.coords.push_back (x);
        }
    
       va_end( argptr );		
        return res;	
    }
    

    schöne Festtage! :xmas2: :xmas1: :xmas2:
    chris90

    PS: DIe Frage zusammengefasst: WIe kann ich feststellen wieviel Argumente übermittelt wurden ohne dafür eine extra variable einzuführen?



  • hattest wohl zu viel gluehwein, eh? :xmas2:
    du willst C++, hier ist aber ANSI C.

    wenns dir nur um dieses va_arg geht, darueber gibt es dokumentationen.
    bei va_arg kannst du die anzahl der argumente nicht bestimmen (glaub ich mal).
    ansonsten seh ich dein problem nicht.

    edit: ich hab mir deinen link angeschaut.
    dort geht das so:
    funktion(foo, bar, baz, ..., NULL); es wird mit NULL terminiert und daran auch erkannt, wann schluss ist.
    entweder du machst das so, fuehrst ne variable fuer die anzahl ein oder findest das implizit raus (wie printf z.b. am formatstring, weshalb es ueberhaupt erst formatstring-vulnerabilities gibt).



  • Nuja ich war etwas auf der Kippe (nich nur wegen dem Glühwein, ProSCHT!!) weil die _arg makros ja eigentlich ANSI C sind, der Rest aber nicht ... 😕

    Aber vielen Dank, d.h. es gibt keine Möglichkeit abzufangen wieviele params übergeben wurden. Ich hab jetzt ne Zählvariable eingeführt am Anfang, und es klappt super ! Danke!

    Frohe Weihnachtsgans! :xmas2: :xmas2: :xmas1: :xmas1: :xmas2: :xmas2:

    Chris90


Anmelden zum Antworten