Argumente aus der Befehlszeile

In vielen Fällen ist es wünschenswert, beim Programmstart auf der Befehlszeile Argumente für das Programm bestimmen zu können.
In C ist die Übergabe von Parametern aus der Befehlszeile ein fester Bestandteil des Sprachkonzeptes. Für den Programmierer sieht das so aus, dass bei der Funktion main zwei Parameter angegeben werden können, deren Benennung sich wie folgt eingebürgert hat:

         main (int argc, char *argv[])

Die Werte werden vom Betriebssystem beim Programmstart eingetragen und können vom Programmierer auf einfachste Weise ausgewertet werden. Die Parameter haben dabei folgende Bedeutung:

- argc      In dieser Integervariablen stehen die Anzahl Argumente, die der Aufrufer in der Befehlszeile angegeben hat.
Der Programmname selber wird hier mitgerechnet, sodass argc niemals kleiner als 1 sein kann.

- argv      Hier handelt es sich um ein Array von Strings.
Jeder einzelne String enthält jeweils ein Befehlszeilenargument. Definitionsgemäss sollte in argv[0] der Programmname des soeben gestarteten Programms übergeben werden. Es gibt jedoch Systeme, die diesen Programmnamen nicht bestimmen können. Dort ist argv[0] undefiniert.
Das erste gültige Argument wird in argv[1] abgelegt, das zweite in argv[2] und so weiter.
Das Array ist immer durch einen Nullzeiger abgeschlossen.

Das folgende Beispiel demonstriert die Anwendung der Befehlszeilenargumente zur Auswertung von Schaltern, die gewisse Zustände beim Programmstart festlegen sollen. Alle Schalter seien durch einen Schrägstrich eingeleitet.

int            sommer, winter, fruehling, herbst;

 

main (int argc, char *argv[])

{

            while (argc > 1) {
                        argc--;
                        if (argv[argc][0] == '/') {                        /* Schalter erkannt */
                                    switch (argv[argc][1]) {
                                                case 'S': sommer = 1; break;
                                                case 'W': winter = 1; break;
                                                case 'F': fruehling = 1; break;
                                                case 'H': herbst= 1; break;
                                    }
                        }
            }

            ...

            ...

}