Kommandoargumente
-
was willste mir damit sagen? es geht nicht, sei doch so freaky und zeig mir bitte wies richtig geht.
-
hmm, lern lieber etwas
schau dir den Code an
int a=1; if(a) std::cout << "a\n"; int b=0; if(b) std::cout << "b\n";
und folgendes Zitat aus der strcmp Beschreibung
return value description
<0 string1 is less than string2
0 string1 is the same as string20 string1 is greater than string2
-
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