Was machen diese Ausdrücke in der main Funktion? |
koilo unregistriert
|
|
|
25.11.2015 10:43 |
|
|
Karlito
Kaiser
Dabei seit: 11.04.2011
Beiträge: 1.461
|
|
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
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 |
|
|
|