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.

    Einmal editiert, zuletzt von AspirinJunkie (13. Dezember 2010 um 15:58)

  • 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


  • 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,

    cin
    getline


    Gruß
    Greenhorn