Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » argument list aus extra-file auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.07.2007, 17:50 Uhr
flappinski



Hallo liebe Leute.
Mein Programm ist ein Kommandozeilen-Programm. Damit auch Laienuser das mit MSYS transportierte Windows-Äquivalent benutzen können, würde ich gerne die Argumente bei argc==1 einfach aus einer Extradatei auslesen. Damit wäre das Programm dann auch mit Doppelklick startbar. Ich will die Optionen aus dem Argument-File unbedingt in argc und argv einlesen, da diese danach von getopt umformatiert werden.
Nun quäle ich mich mit den C-Style-Strings etwas rum, vielleicht könnt Ihr mir helfen:


C++:

    // if no arguments
   if (argc==1){

    // open Argument-File
    std::ifstream arg_in;                            // In_Stream of Argument-File
    std::string arg_file = "argument_file.txt";
    arg_in.open(arg_file.c_str());                  // open Arg_stream

    std::string arg_temp;
    while (1){
        arg_in >> arg_temp;
        if (arg_in.eof()) break;
         argc++;
        strcpy(argv[argc],arg_temp.c_str());
        //        std::cout << arg_temp << std::endl;
    }
    arg_in.close();

   }

    for (int i=0; i < argc; ++i){
        std::cerr << argv[i] << std::endl;
    }




Ich denke, mein Problem liegt in der Zeile mit strcpy. Jedenfalls kommt nicht das gewünscht Ergebnis.

Vielen Dank schon mal,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.07.2007, 18:50 Uhr
Pler
Einer von Vielen
(Operator)


ohne das jetzt alles durchzulesen, aber warum schreibst du dann nicht einfach ein minimales skript, das das Programm mit den entsprechende Argumenten aufruft?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.07.2007, 12:00 Uhr
flappinski



na, weil ich das ganze auf windows laufen lassen möchte. Kann ich denn da auch so ganz einfach scripte schreiben?

auf der anderen seite kann es doch nicht so schwer sein, argv vom programm her zu füllen, oder?

Danke,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.07.2007, 12:12 Uhr
Pler
Einer von Vielen
(Operator)


Natürlich könntest du auch eine Konfigdatei auslesen.
Aber ich denke, du wärst hier mit meiner Methode besser bedient.

Unter Windows nimmst du eben eine .bat-Datei.

Verändern darfst du den argv glaub ich nicht so einfach. Da kannst du Probleme bekommen.
Wenn, dann müsstest du schon eine eigene Struktur (Liste?) anlegen, und sie dann je nachdem mit dem Argumentenvektor füllen oder mit den Daten aus der Konfigdatei.
Du musst deinem Programm übrigens auch in diesem Fall sagen, wo die Konfigdatei liegt. Das müsste entweder fest einkompiliert sein, oder auch wieder als argument übergeben werden. Im ersten Fall hast du schon wieder zumindest Probleme zwischen Win und Linux...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.07.2007, 12:16 Uhr
Blubber2063



Sicher das du da Probleme bekommst, also der Speicher bleibt ja eigentlich erhalten bis das Programm beendet wird, aber ansonsten bekommt getopt doch auch nur einen char** und die Größe des Feldes. Also kannst du doch das Ding beliebig zusammenbauen. Achso sei gewarnt du kannst natürlich nicht einfach so argv manipulieren, denn dort ist nur der Speicher für die übergebenen Argumente vorhanden, gibt es keine Parameter ist dort auch nur der name des Programms als einziges Element vorhanden, kein anderer Speicher.
Dieser Post wurde am 17.07.2007 um 12:18 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
17.07.2007, 13:52 Uhr
flappinski



gut,
danke, ich nahm die Warnungen ernst, habe eine kleine start.bat gebastelt und bin glücklich damit.
LG,
Stephan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: