int main(...)
-
Was vor Programmstart passiert, ist höchst systemabhängig. Ganz grob umrissen läuft das etwa so, dass die Shell (etwa bash oder cmd.exe) die Kommandozeile zerlegt, einen Kindprozess startet und die zerlegte Kommandozeile in execvp bzw. einen entsprechenden Syscall wirft, der das Betriebssystem dazu veranlasst, das Programm mit entsprechenden Parametern auszuführen.
-
Ok, aber wo wird hier dem Programm die verschiedenen Argumente übergeben?Oder woher weis das Programm jetzt, das es neben dem Programmnamen noch 2 weiter strings in argv gibt, also die 2 benötigten Daten?? Die müssen ja i-wie als Argumente übergeben werden....
-GhostfaceChilla-
-
GhostfaceChilla schrieb:
Ok, aber wo wird hier dem Programm die verschiedenen Argumente übergeben?Oder woher weis das Programm jetzt, das es neben dem Programmnamen noch 2 weiter strings in argv gibt, also die 2 benötigten Daten?? Die müssen ja i-wie als Argumente übergeben werden....
Indem du sie dem Programm übergibst, so wie du anderen Programmen auch Parameter übergibst. (Tip: per Doppelklick auf die *.exe unter Windows wird das nichts. Versuch mal die Konsole...)
-
Vielleicht stell ich mir das zu einfach vor.
Auf der Kommandozeile werden mehrere Strings an das Programm übergeben.
Einmal der Programmname und, wenn vorhanden, weitere Argumente.
argc wird dann entsprechend im Programm hochgezählt.In deinem Fall:
argc = 0 --> String( Programmname )
argc = 1 --> 1. Argument kann ein Dateiname sein oder ein Schalter, der das unter argc = 0 gestartete Programm beeinflusst.
argc = 2 --> 2. Argument kann ein weiterer Dateiname sein oder ein Schalter.Sollten noch weitere Argumente übergeben werden, dann geht es so weiter.
Von deinem Quelltext hängt es ab wie die Argumente behandelt werden.
Wenn ihr den Quelltext entsprechend schreibt, könnte ihr einen Dateinamen auch unter Windows als 1.Argument übergeben. Nur mit weiteren fällt mir gerade kein direkter Weg ein, es sei denn man geht über Batch oder Scripte

-
f.-th. schrieb:
Nur mit weiteren fällt mir gerade kein direkter Weg ein, es sei denn man geht über Batch oder Scripte

Jop. Wenn du immer die gleichen Argumente übergibst, kannst du noch mit shortcuts arbeiten. Shortcut auf deine Exe erstellen, Eigenschaften anzeigen und dann die Argumente hinzufügen.
-
Besteht die klitzekleine Möglichkeit, dass du den Quelltext im INet gesucht und gefunden hast und jetzt nicht weißt, wie du das Programm aufrufen musst, damit es funktioniert?

-
DocShoe schrieb:
Besteht die klitzekleine Möglichkeit, dass du den Quelltext im INet gesucht und gefunden hast und jetzt nicht weißt, wie du das Programm aufrufen musst, damit es funktioniert?

Theoretisch schon, praktisch:
Der oben gezeigte Ausschnitt ist aus dem C++ Primer
-
GhostfaceChilla schrieb:
Hallo Leute, habe folgenden Auszug aus einem Quelltext:
int main(int argc, char **argv) { // map und string initialisieren ... if(argc != 3) throw runtime_error(".."); }Nun ist es ja so, das argc die Anzahl der strings unter argv angibt. Nur ist meine Frage woher weis mein Programm wie viel Argumente es hat??
Der oben gezeigte Ausschnitt ist aus dem C++ Primer und wird in einem Programm verwendet, welches Wörter umwandeln soll.In welchem Buch genau steht das bitte? Voller Titel und Autor?
Finde ich nämlich komisch, da ja nirgends ein try/catch in Sicht ist, wodurch im Falle argc!=3 das Programm undefiniertes Verhalten hervorruft. Das kann nicht wirklich ein positives Beispiel sein ...GhostfaceChilla schrieb:
Es heißt argv[0] ist der Name des Programmes, argv[1] + [2] sollen die Namen der jeweiligen Dateien sein, also die Wortliste zum umwandeln und die Liste mit den Umwandlungswörtern. Nur kapier ich nicht, woher weis mein Programm das es jetzt auch 3 Argumente hat? Also woher weis es das es da noch 2 weitere Dateien gibt??
Die Frage ist so einfach, dass ich bezweifle, sie richtig verstanden zu haben. Du willst doch jetzt sicherlich nicht hören, dass argc-1 die Zahl der Parameter ist, die das Programm bekommen hat, oder?
In der Konsole:
C:\DIGNS>meinprogramm.exe parameter1 "dies ist der zweite parameter"main wird dann mit
`argc -> 3argv[0] -> "meinprogramm.exe"
argv[1] -> "parameter1"
argv[2] -> "dies ist der zweite parameter"
`
aufgerufen.
-
krümelkacker schrieb:
GhostfaceChilla schrieb:
Hallo Leute, habe folgenden Auszug aus einem Quelltext:
int main(int argc, char **argv) { // map und string initialisieren ... if(argc != 3) throw runtime_error(".."); }Nun ist es ja so, das argc die Anzahl der strings unter argv angibt. Nur ist meine Frage woher weis mein Programm wie viel Argumente es hat??
Der oben gezeigte Ausschnitt ist aus dem C++ Primer und wird in einem Programm verwendet, welches Wörter umwandeln soll.In welchem Buch genau steht das bitte? Voller Titel und Autor?
Finde ich nämlich komisch, da ja nirgends ein try/catch in Sicht ist, wodurch im Falle argc!=3 das Programm undefiniertes Verhalten hervorruft. Das kann nicht wirklich ein positives Beispiel sein ...Das exakte Verhalten ist hier* nicht undefiniert, sondern implementation defined. Und zwar in engen Maßstäben: Die Implementierung kann wählen, ob sie den Stack aufräumt oder nicht, aber sie darf dir nicht Affen aus dem Arsch fliegen lassen. Danach wird garantiert std::terminate aufgerufen. Da beide Varianten akzeptabel sind, finde ich es völlig ok, das so zu handhaben.
*: Also wenn kein catch gefunden wird. Ich nehme mal an, darauf beziehst du dich.
-
Hat sich erledigt habs herausgfeunden.
Trotzdem Danke
-GhostfaceChilla-