Verstehe String Array nicht



  • Hallo liebe Gemeinde.

    Um String Arrays besser zu verstehen, habe ich folgenden Code aufgesetzt:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
      char Array[] = "Hallo, mein Name ist Maximilian";
    
      cout << Array[];
      cout << endl;
    
      return 0;
    }
    

    Ich habe schon im ganzen Netz nach einer Lösung gesucht, aber ich komme nicht darauf, warum folgende Fehlermeldung ausgegeben wird:

    Error C2059: Syntaxfehler: ']'
    

    Der Fehler verweist auf Zeile 9.

    Könnt ihr mir sagen, was an dem doch lächerlich kleinen Code falsch ist??

    Vielen Dank für die Antworten im Voraus.

    Gruß

    Max



  • char const* und strings sind etwas vollkommen verschiedenes.

    Dein Fehler liegt darin, dass du Array[] zur Ausgabe schreibst, wie du jedoch darauf gekommen bist ist mir schleierhaft. Änder das einfach um in cout << Array . Wie lernst du C++, wenn man mal Fragen darf?



  • Ich lerne, indem ich soviel wie möglich programmier.

    Ich wollte einfach es so programmieren, habe aber nicht gewusst, dass die eckige Klammer weg gehört, um den Array ausgeben zu können.



  • Die Eckige Klammer ohne index ist nur bei der Definition zu verwenden, da der Compiler aus der länge des Literals, welches du dem char const* zuweist die Länge selbst berechnen kann.

    Ich lerne, indem ich soviel wie möglich programmier.

    Um ein gutes Buch wirst du früher oder später nicht herumkommen. Schau mal im Bücherthread hier im Forum nach.



  • Der Tobi schrieb:

    länge des Literals, welches du dem char const* zuweist die Länge selbst berechnen kann.

    Ein Zeichenkettenliteral hat den Typ const char[] und nocht const* char.



  • Ich habe in der Zwischenzeit nocheinmal einen kurzen Code aufgesetzt.

    Er lautet wie folgt:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
      char Array[50000];
    
      cout << "Geben Sie eine Zeichenfolge ein!" << endl;
      cin  >> Array;
    
      cout << "Das haben Sie eingegeben: " << endl;
      cout << Array;
    
      return 0;
    }
    

    Das Programm an sich funktioniert, bloß bei der Ausgabe der Eingabe wird immer nur das erste Wort ausgegeben.

    Warum ist das so????

    Gruß

    Max



  • weil std::cin nur bis zum nächsten leerzeichen liest. dazu zählt leertaste, enter und auch tabs
    aber das kann man einstellen theoretisch

    was du suchst ist std::getline



  • Kannst Du bitte ein Beispiel schreiben?

    Weil ich habe jetzt in Zeile 10 geschrieben

    getline >> Array;
    

    und bekomme die Fehlermeldung

    Error C2563: Listen der formalen Parameter stimmen nicht überein
    


  • #include <string>
    #include <iostream>
    
    int main()
    {
        std::string str;
        std::getline(std::cin, str);
    
        st::cout << str << std::endl;
    
        return 0x0;
    }
    


  • Skym0sh0 schrieb:

    weil std::cin nur bis zum nächsten leerzeichen liest. dazu zählt leertaste, enter und auch tabs
    aber das kann man einstellen theoretisch

    Wie kann man das einstellen?



  • ganz simpel scheints nicht zu sein, kannst mal hiergucken



  • Also ich habe jetzt bei mir auf meinem Netbook in Zeile 10 folgendes stehen:

    getline (cin Array)
    

    "getline" und "Array" sind rot unterringelt.

    Bei "getline" kommt die Meldung

    Error: Keine Instanz von Überladenen Funktionen "getline" stimmt mit der Argumentenliste überein.
    

    Bei "Array" kommt die Meldung

    Error: Es wurde ein ")" erwartet.
    

    Edit:

    Hier steht etwas interessantes und vielleicht was passendes:

    http://www.cplusplus.com/reference/iostream/istream/getline/

    Ich habe demzufolge jetzt in Zeile 10 folgendes geschrieben:

    cin.getline(Array);
    

    Dennoch sind der Punkt und die schließende Klammer rot unterringelt.

    Beim Punkt kommt die Meldung

    Error: Keine Instanz von Überladenen Funktionen "std::basic_istream>_Elem,_Traits>::getline[mit_Elem?char,_Traits?std::char_traits<char>]" stimmt mit der Argumentenliste überein
    

    Bei der Klammer kommt die Meldung

    Error: Zu wenig Argumente im Funktionsaufruf.
    


  • Da fehlt ein Komma. Und nicht Array, sondern std::string, wie oben gezeigt.



  • @out:

    Siehe edit



  • Zeig mal nochmal deinen jetzigen Code.



  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
      char Array[50000];
      cout << "Geben Sie eine Zeichenfolge ein!" << endl;
      cin.getline(Array);
    
      cout << "Das haben Sie eingegeben: " << endl;
      cout << Array << endl;
      cout << endl;
    
      return 0;
    }
    


  • #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
      std::string Array;
      cout << "Geben Sie eine Zeichenfolge ein!" << endl;
      getline(cin,Array);
    
      cout << "Das haben Sie eingegeben: " << endl;
      cout << Array << endl;
      cout << endl;
    
      return 0;
    }
    


  • Ist bei Dir das "getline" nicht rot unterringelt?



  • silent_max schrieb:

    Ist bei Dir das "getline" nicht rot unterringelt?

    Ne, weils ja richtig ist. 😛



  • Weil bei mir ist es rot unterringelt...


Anmelden zum Antworten