Kommandoargumente



  • ok habs jetzt, if (strcmp(argv[1],"-h") == 0), so gehts.
    mein zweites problem ist, dass ich immer einen coredump bekomme, wenn ich als argument gar nix angebe.



  • acid phreak schrieb:

    ok habs jetzt, if (strcmp(argv[1],"-h") == 0), so gehts.
    mein zweites problem ist, dass ich immer einen coredump bekomme, wenn ich als argument gar nix angebe.

    int syntax_parser(int argc, char* argv[]) 
    { 
      if(argc==1)
         cout<<"da war gar kein kommandozeilenargument"<<endl<<"coredump folgt"<<endl;
      if (strcmp(argv[1],"-h")) { 
      cout << "Print Help...\n"; 
      } 
    }
    


  • geht trotzdem nicht, hier mein bisheriger code:

    #include <iostream>
    #include <string>
    #include <fstream>
    #include <cstdlib>
    
    using namespace std;
    
    void error_msg(const string& s)
    {
      cerr << "Fehler: " << s;
    }
    
    int syntax_parser(int argc, char* argv[]) 
    {
      if (argc==1) error_msg("Zu wenig Kommandozeilenargumente.");
    
      if (strcmp(argv[1],"-h") == 0) {  cout << "Gleich"; }
    
    }
    
    int main(int argc, char* argv[])
    {
      syntax_parser(argc, argv);
    }
    


  • habs mal so gemacht, daß der coredump nicht angekündigt wird, sondern gleich auch vermieden.

    int syntax_parser(int argc, char* argv[]) 
    {
      if (argc==1) {error_msg("Zu wenig Kommandozeilenargumente.")}
      else
      if (strcmp(argv[1],"-h") == 0) {  cout << "Gleich"; }
    }
    


  • Sieht doch gut aus. Hast n paar zuviele Header, aber sonst ist alles ok.
    Rufst du das Programm richtig auf?



  • Okay, also ich hab nen neues Problem und da ich leider so ein schlechter Erzähler bin, zeig ich euch einfach mal meinen blöde Code (bin c++ noob). ich hoffe mal ihr könnt erkennen was ich vorhabe in dem codestückchen. ich bekomme wieder einen coredump.

    #include <iostream> 
    #include <fstream> 
    #include <string> 
    #include <cstdlib> 
    
    using namespace std; 
    
    void error_msg(const string& s) 
    { 
      cerr << "Error:\t" << s; 
    } 
    
    struct C_A { /* Diverse kommandozeilen Argumente */ 
      char* short_arg; 
      char* long_arg; 
    }; 
    
    C_A c_a[] = { 
      "-h", "--help" 
    }; 
    
    void syntax_parser(int argc, char* argv[]) /* test */ 
    { 
      C_A* foo; 
      if(argc == 1) 
        { 
          error_msg("Zu wenig Kommandozeilen Argumente\n"); 
        } 
    
      else 
        { 
          for ( int i = 1; i < argc; ++i) 
        { 
          for ( int x = 0; x < 10; ++x) 
            { 
              strcmp(argv[i], foo[x].short_arg); 
              cout << argv[i]; 
            } 
        } 
        } 
    
    } 
    
    int main(int argc, char* argv[]) 
    { 
      syntax_parser(argc, argv); 
    }
    


  • foo war ein zeiger, der nicht initialisiert war, also ins nirwana zeigte. in speicher, der coredumpt, wenn man ihn benutzt.

    oben geht es mit
    C_A* foo=&c_a;

    oder einfacher unten mit
    strcmp(argv[i], c_a[x].short_arg);



  • du bist ja ein richtiger schatz volkard, nu geht's



  • halt mom *g*, wieder core dump:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    void error_msg(const string& s) 
    {
      cerr << "Error:\t" << s;
    }
    
    struct C_A { /* Diverse kommandozeilen Argumente */
      char* short_arg;
      char* long_arg;
    };
    
    C_A c_a[] = {
      "-h", "--help"
    };
    
    void syntax_parser(int argc, char* argv[]) /* test */
    {
      if(argc == 1) 
        {
          error_msg("Zu wenig Kommandozeilen Argumente\n");
        }
    
      else if ((strcmp(argv[1], c_a[0].short_arg) == 0) || (strcmp(argv[1], c_a[1].long_arg) == 0))
        {
          cout << "klappt!";
        }
    
    }
    
    int main(int argc, char* argv[])
    {
      syntax_parser(argc, argv);
    }
    


  • ok ich blödmann, es muss natürlich c_a[0].long_arg heißen


Anmelden zum Antworten