Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Was machen diese Ausdrücke in der main Funktion? » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Was machen diese Ausdrücke in der main Funktion?
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
koilo
unregistriert
Was machen diese Ausdrücke in der main Funktion? Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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. :-)

koilo hat dieses Bild (verkleinerte Version) angehängt:
Screenshot (5).png

25.11.2015 10:43
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
25.11.2015 13:28 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Was machen diese Ausdrücke in der main Funktion?