char * argv[] an Funktion übergeben



  • Hallo.
    ich habe ein doofes Problem, ich möchte das Array argv[] an eine Funktion übergeben. Ich versuchte es so:

    int call_bash(char *);
    int main(int argc, char * argv[] )
    {
    call_bash(*argv);
    }
    
    call_bash(char * argv[] )
    {
    cout << "argv 2:"<<argv[2];
    }
    

    Das Problem ist also nur, dass die Einträge in argv[] in call_bash nicht automatisch verfügbar sind. Ich muss diese call_bash übergeben, leider kenn ich mich mit Pointern und so nicht sonderlich gut aus.

    Danke!



  • call_bash(argv);



  • test.cpp:127:2: warning: no newline at end of file
    test.cpp: In function int main(int, char**):
    test.cpp:43: error: cannot convert char** to char* for argument 1 to int call_bash(char*)



  • Ehm nicht ganz 😛

    int call_bash(char *);
    call_bash(char * argv[] )
    {
    cout << "argv 2:"<<argv[2];
    }
    

    so guck dir die beiden Zeilen mal an.
    1. Hast du bei der Deklaration noch ein int als Rückgabewert angegeben. Bei der Definition nicht mehr.
    2. ist char* x[] das gleiche wie char*? Oder eher doch char**?

    int main(int argc, char * argv[] )
    {
    call_bash(*argv);
    }
    

    Hmm. So gibst du der Funktion einen char* (*argv ^= argv[0]), wie es deine Funktionsdeklaration auch angibt. Deiner Definition nach haut das aber nicht hin.
    Nach dem was in deiner call_bash-Funktion steht, willst du das:

    void call_bash(char** ptr_arr, std::size_t size)
    {
        for (std::size_t i(0); i < size; ++i) std::cout << ptr_arr[i] << std::endl;
    }
    
    int main(int argc, char* argv[])
    {
        call_bash(&argv[1], argc - 1);
    }
    

    . In argv[0] steht der Programmpfad, den brauchen wir ja nicht, deswegen erst ab Element 2 (&argv[1], 1 da Index bei 0 beginnt).



  • Hm du scheinst es ja zu checken 🙂

    Nein, ich möchte alle Elemente von argv in call_bash zur Verfügung haben. Genau so, wie ich sie in main() auch habe.

    int call_bash(char**);
    
    int main(int argc, char * argv)
    {
    int test=0;
    test=call_bash(&argv); 
    }
    
    int call_bash(char** arr)
    {
     cout << "Beispiel:"<<arr[2];
    }
    

    Hm, funktioniert natürlich noch immer nicht ... 😕



  • Gast 😕 schrieb:

    Hm, funktioniert natürlich noch immer nicht ... 😕

    Kein Wunder, Du machst auch konsequent etwas anderes als vorgeschlagen wurde und missachtest dabei das, was der Compiler Dir sagt.



  • int main(int argc, char * argv)
    

    ...

    int main(int argc, char* argv[])
    // bzw.
    int main(int argc, char** argv)
    

    wären gültige main Signaturen.
    Und ich hab kein Bock dir das jetzt nochmal da hin zu schreiben.
    Du kannst 1. nicht davon ausgehen, das jemand überhaupt ein Argument an dein Programm übergibt => du musst erstmal gucken ob argc > 1 ist. Deswegen hab ich auch den extra Parameter("size") bei deiner call_bash-Funktion angehangen.



  • Du kannst 1. nicht davon ausgehen, das jemand überhaupt ein Argument an dein Programm übergibt => du musst erstmal gucken ob argc > 1 ist

    Das mach ich schon an einer anderen Stelle im Programm. Meine Frage ist lediglich, wie ich es anstellen muss, damit ich in call_bash genau gleich auf das argv Array zugreifen kann wie in main.

    Hab vorhin noch nen kleinen Schreibfehler gemacht. Also, an diesem Punkt steh ich momentan:

    int call_bash(char **);
    int main( int argc, char * argv[])
    {
      int test=0;
      test=call_bash(*argv[]); //Da liegt das Problem
    
    }
    
    int call_bash(char * arr[])
    {
    cout << "blablabla";
    }
    


  • Tjo denn das ist purer nonsens.

    int test(call_bash(argv));
    

    und fertig.



  • Jo, danke...


Anmelden zum Antworten