Hawkster
Erfahrenes Mitglied
Hallo ihr lieben,
hab eine Funktion geschrieben welche kommandozeilenparameter interpretieren soll...
Leider gibts ein kleines Problem... wenn ich das erste mal die Funktino aufrufe kommt der Parameter nicht richtig an... nach dem 2. mal geht es...
Könnte mir das bitte jemand erklären?
Und die Ausgabe sieht bei mir so aus:
D:\Test>cmd_fuck.exe --input=../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.?8>
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
D:\Test>
Bin gerade sehr verwirrt...
Mfg
Hawkster
hab eine Funktion geschrieben welche kommandozeilenparameter interpretieren soll...
Leider gibts ein kleines Problem... wenn ich das erste mal die Funktino aufrufe kommt der Parameter nicht richtig an... nach dem 2. mal geht es...
Könnte mir das bitte jemand erklären?
C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARGV_INPUT "--input="
#define ARGV_OUTPUT "--output="
#define ARGV_LANG "--lang="
#define ARGV_HELP "--help"
#define ARGV_DELIMITER "="
#define HELP_MSG "Usage: wechselkurse [--input= | --output | --lang=[de|en]]\n\
--input: input file\n\
--output: output file\n\
--lang: language\n"
//Function to extract the input stream
char* get_arg_input(int argc, char* argv[]) {
int i;
char temp[256] = "";
char *ptr1 = NULL; //Pointer for strstr
char *ptr2 = NULL; //Pointer for strtok
//==> Start at index 1 -> Filename is not our required "lang"-tag :D
for(i=1; i < argc; i++) {
ptr1 = NULL;
ptr2 = NULL;
sprintf(temp, "%s", argv[i]);
//==> Search "--input"-Tag
strcpy(temp, argv[i]); //<== Copy string
ptr1 = strstr(strlwr(temp), ARGV_INPUT);
//==> Found the right index with the "needed" content
if (ptr1 != NULL) {
//==> Find the "lang"-Tag
ptr2 = strtok(ptr1, ARGV_DELIMITER);
if (ptr2 == NULL) {
continue;
}
//==> Shift Pointer to next result
ptr2 = strtok(NULL, ARGV_DELIMITER);
if (ptr2 != NULL) {
return strlwr(ptr2);
}
}
}
return "stdin"; //<== Default language
}
int main(int argc, char *argv[]){
printf("\n->Erste ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Zweite Ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Erste ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Zweite Ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Erste ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Zweite Ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Erste ausgabe: %s", get_arg_input(argc, argv));
printf("\n->Zweite Ausgabe: %s", get_arg_input(argc, argv));
return EXIT_SUCCESS;
}
Und die Ausgabe sieht bei mir so aus:
D:\Test>cmd_fuck.exe --input=../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.?8>
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
->Erste ausgabe: ../daten/eurofxref-hist.txt
->Zweite Ausgabe: ../daten/eurofxref-hist.txt
D:\Test>
Bin gerade sehr verwirrt...
Mfg
Hawkster
Zuletzt bearbeitet von einem Moderator: