Was machen diese Ausdrücke in der main Funktion?

Neue Frage »

Auf diesen Beitrag antworten »
koilo Was machen diese Ausdrücke in der main Funktion?

Meine Frage:
Hi,
schaut euch bitte mal den beigelegten Screenshot an und verratet mir, was es mit dem "(int argc, char *argv[])"(manchmal auch:"char** argv") auf sich hat und der Zeile danach.
War in der Vorlesung vermutlich nicht da :-/ und im Skript steht dazu leider nichts.
Zudem kompiliert er das ganze, aber sagt beim Ausführen des Programmes "Kann Argument 1 nicht lesen: zu wenig Argumente", obwohl Linux bei mir auf Englisch läuft.


Meine Ideen:
Ich schätze mal, dass das so ne Art Einlese-Operatoren sein sollen.

Vielen Dank für jegliche Hilfe. :-)
 
Auf diesen Beitrag antworten »
Karlito

Hallo koilo,

argc repräsentiert die Anzahl der Befehlszeilenparameter, die an das Programm übergeben wurden und argv ist der Argumentenvektor. D.h. es ist ein Array, was auf die einzelnen Befehlszeilenparameter verweist.

C liest sich an dieser Stelle ein wenig unschön. char **x bedeutet, es ist ein Zeiger auf einen Zeiger, der auf einen character verweist. Ein char x[] ist ein Array von char unbestimmter Länge. Intern ist x jedoch ein Zeiger auf die Anfangsadresse dieses Arrays. Mit x[0] erhält man das Selbe wie mit *x, nämlich den char, der sich an der Adresse, welche durch x repräsentiert wird, befindet. x[1] addiert auf die Adresse x den Abstand eines char und gibt den Wert, der sich an dieser Adresse befindet zurück.

Man muss nun auch noch wissen, dass in C String char-Arrays sind, welche mit '\0' Terminiert sind. Wenn Du also ein char x[] hast und dort das Wort "bla" gespeichert ist, dann befindet sich an der Adresse x das Zeichen 'b' und an der Adresse x+3*char das Zeichen '\0'.

char x[] und char *x sind übrigens weitestgehend äquivalent. Vielleicht gibt es Spitzfindigkeiten, bei denen sich die beiden Definitionen unterscheiden, die sind mir aber gerade nicht geläufig.

Damit es nun noch etwas komplizierter wird, ist char *x[] ein Array von char-Pointern. D.h. mit x[0] bekommst du einen Zeiger auf einweiteres char-array. In deinem Fall müsstest Du mit printf("%s\n", argv[0]) das erste Befehlszeilenargument wiedergegeben bekommen.

Dass dein Programm nicht funktioniert, liegt daran, dass Informatiker meist bei 0 anfangen zu zählen. Du solltest also readarg( argc, argv, 0) verwenden. Die Ausgabe erscheint übrigens auf deutsch, weil es in der fcpp.hh so definiert ist. Schau da mal rein Augenzwinkern Die Header-Datei fcpp.hh scheint ihr ja gestellt bekommen zu haben. Ich habe sie nur durch googeln auf github entdeckt.

Gruß,

Karlito
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »