2015-09-02 14 views
5

Sie alle wissen, diese Funktion:C++ Bearbeitung der Elemente von char * argv []

int main(int argc, char* argv[]) 
{ 

} 

Ich möchte eine Befehlszeilenschnittstelle in Linux für mein Programm schreiben, die in der Regel von getopt_long()

erfolgt

Mein Programm würde von der Kommandozeile wie folgt ausgeführt werden:

pop3 get --limit 25 --recent 

Daher ist die argv[]pop3 als Programmnamen umfassen würde, und der Rest wird als Option behandelt. Ich möchte pop3 aus meiner Zeichenfolge löschen und das erste Token nach ihm als das erste Element des Arrays festlegen. Gibt es einen anderen Weg als das Durchlaufen?

+14

Einfache Lösung: abschneiden: 'argv ++; argc -; ' –

+0

Trick: Sie können die Zeichenfolgen, die zu schreibgeschütztem Speicher gehören, nicht ändern, hören Sie einfach auf, auf sie zu verweisen. – Asim

+0

* "Gewöhnlich von' getopt_long() '" *. Was wolltest du damit sagen. Wirst du 'getopt_long()' benutzen oder nicht? – user3386109

Antwort

10

Nur den Zeiger argv inkrementieren und die argc dekrementieren. Beispiel:

int main(int argc, char *argv[]) 
{ 
    argc--; 
    argv++; 

    return 0; 
} 

Dies funktioniert, weil, wenn Sie argv erhöhen, haben Sie immer die vorherigen Daten im Speicher haben, es ist nur, dass die Basisadresse des argv erhöht hat. Und Sie dekrementieren argc, weil Sie jetzt ein weniger Argument haben.