argv durchsuchen, richtig gelöst?
-
Hi
ich bin noch ein quasi absoluter neuling in sachen c bzw. c++
Vorallem die syntax und die ganzen fehlenden standards die man wo anders findet (selbst php) macht mir zu schaffen.wie dem auch sei, ich wollte mich mal mit den Argumenten beschäftigen und sehen wie gut man damit arbeiten kann.
Und es tauchte auch gleich das erste problemchen auf
du kannst ja mit switch keine ganzen strings vergleichen, nur zahlen oder ein zeichen (char)
das aber nur nebenbei, nun gut, muss ich halt mehr mit if schleifen arbeiten...
das nächste problem, wie kann ich möglichst einfach die übergebenen argumente durchsuchen und wenn ein bestimmtes angegeben wurde das übergeben bzw. damit arbeiten?
nach längerem suchen konnte ich außer den üblichen for schleifen um alle argumente durchzugehen nichts finden. Auch neue probleme tauchten auf.
Wie z.B. dass man Array ellemente nicht einfach mit einem string vergleichen kannnunja, dann hab ich eine zeitlang gegrübelt und habe mir nun eine etwas mikrige funktion gebastelt die diese aufgabe für mich erledigt.
die funktion lautet wie folgt:
/* Globale Variablen */ int argsCount = 0; char** argsValue = NULL; char* getArgs(char*, char* = ""); ... int main(int argc, char* argv[]) { argsCount = argc; argsValue = argv; ... char* getArgs(char* pattern, char* result) { char* string; for (int i=1; i<argsCount; i++){ string = argsValue[i]; if (strcmp(pattern,string)==0){ if (strcmp(result,"")==0){ result = string; } break; } else string = ""; } if (strcmp(string,"")==0) result = string; return result; };
will ich nun wissen ob ein bestimmter argument übergeben wurde mach ich einfach:
printf(getArgs("--help","Hilfe wurde aufgerufen"));
Das ergibt als ausgabe:
> Hilfe wurde aufgerufenIch kann auch einfach nur:
printf(getArgs("--help");
eingeben, was wiederum als ausgaben folgendes ergibt:
--helpWird nichts gefunden bekommt man als Ergebnis einen leeren string (char)*
Damit kann man nun schon eine Menge anstellen und mit den übergebenen werten weiter arbeiten...
Nun zur meiner Eigentlichen Frage und überhaupt warum ich dieses Thema hier eröffne.
Gibt es eine Bessere Möglichkeit? Einfachere? Schnellere?
Bin über Tipps dankbar. MfG.
-
Naja, obwohl Dein Code etwas chaotisch aussieht, ist das ungefähr der richtige Weg. Aber ich würde das stilistisch noch etwas anders machen:
bool ParameterIstVorhanden (char *parameter, int argc, char *argv []) { for (int i=1; i<argc; i++) { if (strcmp (parameter, argv [i])==0) return true; } return false; }
Die Funktion geht sofort raus, wenn er den Parameter gefunden hat. Und dann könnte man eine andere Funktion schreiben, die das überprüft und entsprechend den gewünschten String zurückgibt.