wie argc, argv filtern?
-
Ich scheitere gerade Erbärmlichkeit an C arrays.
Ich habe ein main Funktion von welcher ich eine andere 'program_main' Funktion aufrufe.
Das sieht ungefähr so aus:
int main (int argc, char* argv[]) { program_main (argc, argv); }ich möchte jetzt argv filtern, und argc entsprechend verkleinern.
Mein naiver ansatz:
int main (int argc, char* argv[]) { std::vector<char*> myargs ; for (int i = 0; i < argc ; ++i) { // if filter ok myargs.push_back(argv[i]); } program_main (myargs.size(), &myargs[0]); }das scheint aber nicht zu funktionieren, program_main verabschiedet sich mit einem sigterm
crash im Fall das myargs leer ist, und ist etwas drinnen wird es nicht erkannt.Es scheint also das mir ein ganz wichtiges Detail entgeht, nur welches, wie kann ich argv filtern?
-
Der gezeigte Code sieht korrekt aus. Die Funktion wird wohl nicht erwarten, dass ihr etwas vorenthalten wird. argv[0] = Programmname? argv[argc] = Nullpointer?
-
Debugge das doch mal. Vermutlich stimmt da etwas mit deinem Filter nicht. Du vergleichst hoffentlich nicht char* per "=="?
Abgesehen davon: Könntest du nicht program_main direkt den gefilterten vector übergeben? Oder werden da zwingen dieselben Parameter erwartet wie bei der main?
edit: wow, Beitrag #1000!!! Ich hoffe, ein hilfreicher

-
cool manni66
dummer weise sah meiner Filter Schleife so aus
for (int i = 1; i < argc ; ++i) { // if filter ok myargs.push_back(argv[i]); }und da hat argv[0] im vector gefehlt, und das war ganz schlecht
fix:
myargs.push_back(argv[0]); for (int i = 1; i < argc ; ++i) { // if filter ok myargs.push_back(argv[i]); }jetzt funktioniert es wie es soll.
Danke!