String Deklaration

  • Hi @all


    Ich stell mich seit gestern so dumm an und kann keinen string mehr deklarieren
    mein code:


    Code
    string sName;


    Ich bekomme aber eine fehlermeldung (2):

    Zitat

    Fehler 1 error C2065: 'string': nichtdeklarierter Bezeichner c:\users\simon\documents\visual studio 2008\projects\visual c++\start\test\test\main.cpp 6
    Fehler 2 error C2065: 'cName': nichtdeklarierter Bezeichner c:\users\simon\documents\visual studio 2008\projects\visual c++\start\test\test\main.cpp 6

    Aber Was mach ich Falsch?

  • Ein string ist nichts anderes als char*
    Deshalb hat dieses Script die gleiche wirkung:


    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Soll ich aus dem kurzen Satz schließen dass String-Header und namespace auch korrekt vorhanden sind?
    Raten kann ich viel wenn du nur so einen Fetzen postest.


    Ein string ist nichts anderes als char*

    Ist es nicht.
    Ein String ist in C++ ein Objekt.
    Es wurde bewusst in C++ eingeführt um die alte unsichere C-Methode mit den Char-Arrays zu ersetzen.
    Es ist einfacher zu handhaben und sicherer weil Bereichsüberläufe abgefangen werden.
    Mit #include <string.h> werden im übrigen die C-Stringfunktionen eingebunden.
    Das C++ Objekt bindet man mit #include <string> ein.


  • string is included
    das mit std dürfte doch mit der deklaration eines strings nicht zusammenhängen, da std mit den consolen befehlen zusammenhängt

  • #include <iostream>
    #include <string>
    using std::cin;
    using std::cout;
    int main () {
    // Deklaration
    string sName;
    //Programm
    cin >> cName;
    cout << cName;
    // End
    system("Pause");
    }



    So sollte es gehen.
    Aber AspirinJunkie, danke für das Aufklären, nur weiß ich nicht was an den Pointern so falsch ist, bzw unsicher =0

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Iwie wird in meinem string alles nach dem ersten leerzeichen nicht registriert



    Wenn ich meinen vor und nachnamen eingebe bekomme ich nur meinen vornamen ausgegeben

  • bekomme aber einen Fehler


    Code
    getline(sName);


    Zitat

    Fehler 1 error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &)': Erwartet 2 Argumente - 1 unterstützt c:\users\simon\documents\visual studio 2008\projects\visual c++\start\test\test\main.cpp 30
    Fehler 2 error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)': Erwartet 3 Argumente - 1 unterstützt c:\users\simon\documents\visual studio 2008\projects\visual c++\start\test\test\main.cpp 30

  • Hi,


    Code
    string sName;
    // ...
    cin >> cName;

    Wo ist cName deklariert ???


    Aber AspirinJunkie, danke für das Aufklären, nur weiß ich nicht was an den Pointern so falsch ist, bzw unsicher =0


    Ein C-String ist ein char, bzw. wchar_t Array mit abschliessendem Nullzeichen.
    Ein String der Klasse string endet nicht mit einem Nullzeichen.
    Sieh dir mal die Headerdatei string an ...


    Verlangt eine Funktion einen Zeiger auf einen C-String und dieser besitzt kein abschliessendes Nullzeichen überschreitet u.U. die Funktion den Speicherbereich des C-String-Arrays bei der Bearbeitung des selbigen und kann in Speicherbereiche außerhalb deines Prozesses vordringen. Im besten Fall passiert nichts, im schlechtesten Fall stürtzt das Programm ab und reißt das OS mit in den Abgrund.


    Google mal mit "Pufferüberlauf" oder "Buffer overflow" füttern ...



    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner

  • es heist sname richtig


    mit cin.getline(sName); kommt folgender fehler


    Code
    Fehler 1 error C2661: 'std::basic_istream<_Elem,_Traits>::getline': Keine überladene Funktion akzeptiert 1 Argumente c:\users\simon\documents\visual studio 2008\projects\visual c++\start\test\test\main.cpp 30
  • Hi,





    Gruß
    Greenhorn

    „Der erste Schritt, den jeder tun kann, ist, sich frei zu machen von dem Untertanengemüt.“
    ―Herbert Wehner