Frage zu main(**********) {...}



  • int main(int argc, char *argv[])
    

    1. Wieso wird in den meißten Codes der Funktion main ein Integer und ein Pointer auf ein char-Array in dieser Forum übergeben?

    2. Was lässt sich damit tun/anrichten?? 🙂

    3. Sind die Namen der Argumente per Konvention so festgelegt worden?

    thx gleich mal!



  • die sind per ansi-c-standard so festgelegt. sie enthalten die kommondozeilenparameter, beim aufruf des programms übergeben worden sind.

    wenn zb das programm copy.exe in der konsole mit

    COPY DATEI.TXT KOPIE.TXT
    

    gestartet wird, dann enthalten die parameter der main-funktion von copy.exe folgende werte:

    argc=3;              // kommandozeile besteht aus 3 worten
    argv[0]="COPY";      // argv[0] enthält immer den programmnamen (systemabhängig; unter windows dateiname mit vollem pfad)
    argv[1]="DATEI.TXT"; // erstes argument
    argv[2]="KOPIE.TXT"; // zweites argument
    argv[3]=NULL;        // die liste wird immer mit einem null-zeiger abgeschlossen
    

    der int-rückgabewert ist ein fehlercode. normalerweise ==0, wenn die programmausführung fehlerfrei war; !=0 sonst. dieser fehlercode ist betriebssystemabhängig. der header stdlib.h definiert aber zwei standard-rückgabewerte EXIT_SUCCESS und EXIT_FAILURE. also

    #include<cstdlib>
    
    return EXIT_SUCCESS;
    return EXIT_FAILURE;
    


  • Alles klar soweit,
    NUR: Wenn ich diesen Code compiliere wird keine Kopie von "Datei.txt" erstellt:

    Das ist der Code:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    argc=3;              // kommandozeile besteht aus 3 worten
    argv[0]="COPY";      // argv[0] enthält immer den programmnamen (systemabhängig; unter windows dateiname mit vollem pfad)
    argv[1]="DATEI.TXT"; // erstes argument
    argv[2]="KOPIE.TXT"; // zweites argument
    argv[3]=NULL;        // die liste wird immer mit einem null-zeiger abgeschlossen
    return EXIT_SUCCESS; 
    }
    

    Woran liegt das?
    ("Datei.txt" habe ich natürlich erstellt)

    Danke für deine schnelle Antwort!

    Anbei:
    Kann man auch argv[3]="\0"; schreiben? Jedenfalls wird es fehlerfrei compiliert.



  • Ne, mal im Ernst... Acker' erstmal ein Tutorial durch. So gibt das nichts.



  • NUR: Wenn ich diesen Code compiliere wird keine Kopie von "Datei.txt" erstellt:

    Das liegt daran, dass C++ mist und veraltet ist.
    Ich habe gestern z.B. folgendes Programm programmiert.

    int main() {
        doWhatIMean();
    }
    

    Ergebnis: Lies sich nicht übersetzen!
    Habe dann bis nachts um drei dran rumgefummelt. Am Ende wurde es zwar übersetzt, hat aber überhaupt nicht das gemacht, was ich mir gedacht habe.

    Fazit: C++ ist derart veraltet, dass man die Sprache erst lernen muss, bevor man damit was anfangen kann.



  • 😃 😃 👍



  • @Diron

    Es werden Argumente an die MainFkt. übergeben.
    Du sollst sie also nicht in der Fkt. angeben. 😉

    Und wunder dich nicht, dass nix passiert, wenn
    du keine DoWhateverIWant()-Fkt. aufrufst. 😃



  • mit

    int argv
    

    wird die anzahl der parameter bestimmt.

    mit

    char* argv[] //oder char** argv
    

    werden die parameter selbst angegeben.


Anmelden zum Antworten