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!


Anmelden zum Antworten