Wie kann ich mains *argv übergeben[] zu einer Funktion?

Lesezeit: 2 Minuten

Ich habe ein Programm, das Befehlszeilenargumente akzeptieren kann, und ich möchte über eine Funktion auf die vom Benutzer eingegebenen Argumente zugreifen. Wie kann ich die bestehen *argv[]aus int main( int argc, char *argv[]) zu dieser Funktion? Ich bin ein bisschen neu im Konzept von Zeigern und *argv[] sieht für mich etwas zu komplex aus, um es alleine zu lösen.

Die Idee ist, meine zu verlassen main so sauber wie möglich, indem ich die ganze Arbeit, die ich mit den Argumenten machen möchte, in eine Bibliotheksdatei verschiebe. Ich weiß schon, was ich mit diesen Argumenten zu tun habe, wenn ich es schaffe, sie draußen zu fassen main. Ich weiß nur nicht, wie ich sie dorthin bringen soll.

Ich verwende GCC. Danke im Voraus.

Benutzer-Avatar
Fred Fu

Schreiben Sie einfach eine Funktion wie z

void parse_cmdline(int argc, char *argv[])
{
    // whatever you want
}

und ruf das an main wie parse_cmdline(argc, argv). Keine Magie beteiligt.

Tatsächlich müssen Sie nicht wirklich bestehen argcseit dem letzten Mitglied von argv ist garantiert ein Nullzeiger. Aber da hast du argcdu kannst es genauso gut bestehen.

Wenn die Funktion den Programmnamen nicht kennen muss, können Sie sie auch als aufrufen

parse_cmdline(argc - 1, argv + 1);

  • Was ist, wenn argv als const char *argv definiert ist?[]? So ist OS X, und ich kann Apples ABI nicht genau ändern …

    – MarcusJ

    4. Juni 2016 um 11:24 Uhr


  • @MarcusJ Ja – ARC steht dem in XCode unter OSX im Weg. Ich musste sie wie folgt an meine ObjC++-Klassenmethode übergeben getParams(argc,argv)musste dann aber diese Funktion wie deklarieren static std::map<std::string,std::string> getParams(int argc, const char **argv) Beachten Sie das **argv. Dann könnte ich innerhalb der Klassenmethode verwenden argv so normal, als ob es in der wäre main Funktion. (Das map Zeug auf dem Rückgabeergebnis war, weil meine Funktion die Variablen in Schlüssel = Wert-Zuordnungspaare konvertierte. Nicht, dass Sie das auch tun könnten.)

    – Wolomike

    18. Juli 2016 um 0:34 Uhr

Pass einfach argc und argv zu deiner Funktion.

Benutzer-Avatar
Ed S.

SomeResultType ParseArgs( size_t count, char**  args ) {
    // parse 'em
}

Oder…

SomeResultType ParseArgs( size_t count, char*  args[] ) {
    // parse 'em
}

Und dann…

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

1245850cookie-checkWie kann ich mains *argv übergeben[] zu einer Funktion?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy