Vektoren



  • Hi zusammen!

    Ich übe gerade, mit Pointern u.ä. etwas umzugehen.
    Ich habe folgendes Programm geschrieben:

    #include <iostream>
    
    int main(int argc, char** argv[]) // Zeiger auf den Zeiger.
    {
    
      if(argc == 0)
      {
        std::cout << "Error: " << argv[0]
                  << ": at least one argument has to be passed"
                  << std::endl;
      }
    
      else
      {
        for(int index = 0; index < argc; index++)
        {
          std::cout << "argument [" << index << "] is "
                    << argv[index] << std::endl;
        }
      }
    
      return 0;
    
    }
    

    Die Aufgabe dazu war: "Print the command-line arguments provided."
    Stimmt der Code?
    Mir gibt er einfach das aus: "argument[0] is 0215406" . Da ich nichts übergeben habe, kann das gut sein, dass der Code stimmt..was meint ihr?

    Liebe Grüsse,
    Luki



  • argv ist vom Typ char**, nicht char**[].



  • Danke für den Hinweis!



  • Du bekommst übrigens immer mindestens einen Parameter in argv[0]:
    Den Befehl wie dein Programm gestartet wurde. Also als Beispiel:
    C:\Foo\bar.exe
    oder auch
    ..\bar.exe



  • Scorcher24 schrieb:

    Du bekommst übrigens immer mindestens einen Parameter in argv[0]:
    Den Befehl wie dein Programm gestartet wurde. Also als Beispiel:
    C:\Foo\bar.exe
    oder auch
    ..\bar.exe

    Wobei das immer etwas übertrieben ist. AFAIK ist das nicht standardisiert.



  • theta schrieb:

    Scorcher24 schrieb:

    Du bekommst übrigens immer mindestens einen Parameter in argv[0]:
    Den Befehl wie dein Programm gestartet wurde. Also als Beispiel:
    C:\Foo\bar.exe
    oder auch
    ..\bar.exe

    Wobei das immer etwas übertrieben ist. AFAIK ist das nicht standardisiert.

    Kommt darauf an.
    In C++ ist das nicht erlaubt, main() rekursiv aufzurufen. In C schon. Also in C kann es fehlen, wenn man main(0, NULL) als Beispiel selbst rekursiv aufruft.
    In C++ ist es wie gesagt verboten und afaik ist das standardisiert.
    Aber es gibt eventuell Platformen wo es keine executables gibt und alles im speicher stattfindet, da mag es fehlen :P.
    Aber ich gehe hier eigentlich meistens von "normalen" Platformen aus solange nichts anderes genannt wird.



  • Scorcher24 schrieb:

    theta schrieb:

    Scorcher24 schrieb:

    Du bekommst übrigens immer mindestens einen Parameter in argv[0]:
    Den Befehl wie dein Programm gestartet wurde. Also als Beispiel:
    C:\Foo\bar.exe
    oder auch
    ..\bar.exe

    Wobei das immer etwas übertrieben ist. AFAIK ist das nicht standardisiert.

    Kommt darauf an.
    In C++ ist das nicht erlaubt, main() rekursiv aufzurufen. In C schon. Also in C kann es fehlen, wenn man main(0, NULL) als Beispiel selbst rekursiv aufruft.
    In C++ ist es wie gesagt verboten und afaik ist das standardisiert.
    Aber es gibt eventuell Platformen wo es keine executables gibt und alles im speicher stattfindet, da mag es fehlen :P.
    Aber ich gehe hier eigentlich meistens von "normalen" Platformen aus solange nichts anderes genannt wird.

    Wenn man mit excec?? auf Unix einen neuen Prozess startet, muss man argv selbst zusammenstellen. Das erste Argument ist auch da nur per Konvention der Programmname, erzwungen wird das nicht.



  • int main(int argc, char** argv)
    {
        std::vector<std::string> v(argv, argv + argc);
        for(std::size_t i = 0; i < v.size(); ++i)
            std::cout << v[i] << std::endl;
    }
    

    So würde ich es machen.


Log in to reply