Frage zu C/C++ Strings bzw. STL



  • hallo,

    würde gerne wissen, was der unterschied zwischen std::strings und c/c++ strings ist.
    ich weiss nur, dass std::strings für die dateiverarbeitung verwendet werden.
    hat jemand mehr ahnung davon ? danke!

    lg



  • STL-String? Du meinst wahrscheinlich std::string als Bestandteil der Standard Template Library (STL). Das ist eigentlich die Standard-Zeichenketten-Klasse in C++, normalerweise verwendet man die.

    C-Strings hingegen sind statische oder dynamische Arrays aus char , die mit einer Nullterminierung enden. In C werden diese für Zeichenkettenverwaltung verwendet, in C++ nimmt man die komfortablere und weniger fehleranfällige Klasse std::string .



  • danke! genau das meinte ich. habe mich verschrieben 😉
    das sind die einzigen unterschiede ?

    lg



  • man sollte noch erwähnen, daß man in C++ nicht durchweg auf C-Strings von der Sorte char* verzichten kann.



  • Also eben, mit std::string ist man viel komfortabler. Man kann sich die Speicherverwaltung sparen, riskiert keine Pufferüberläufe, kann Strings bequem aneinanderhängen. Zudem ist die Kompatibilität zur STL besser als bei char* .

    u_ser-l schrieb:

    man sollte noch erwähnen, daß man in C++ nicht durchweg auf C-Strings von der Sorte char* verzichten kann.

    Aber wohl in den allermeisten Fällen. Es gibt immer noch std::string::c_str() oder std::vector<char> , damit kann man auch eine Verbindung zu C-Schnittstellen gewährleisten.



  • Der grosse Vorteil von std::string gegenbüber von C-Strings ist halt, dass es eine Klasse ist und somit mehr Funktionalität bieten kann. Alleine schon z.B die Kopiersemantik ist Gold Wert. Und das geniale daran ist, dass man z.B auch einen string bauen kann, der die selben Eigenschaften anbietet, wie ein C-String. (Also keine Kopien erstellt) Sofern das erwünscht ist.
    C-Strings haben halt ihre Daseinsberechtigung, wegen den vielen Schnittstellen, die leidlglich einen C-String anbieten. (Vor allem auch die vielen C-Bibliotheken).

    EDIT:
    Hier noch was zu strings:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-155739.html
    Und noch was interessantes (hat zwar jetzt nichts direkt mit der Frage zu tun, aber naja.):
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-161855-and-highlight-is-multibyte.html



  • bedanke mich herzlich für die hilfreiche antworten!
    endlich kenne ich den wahren unterschied.

    lg



  • std::string ist dann auch solange toll, bis man Unicode verwenden möchte und dabei bemerkt, dass std::string (unix utf-8) und std::wstring (im Falle von Windows) dafür nicht der Weisheit letzter Schluss sind.



  • Decimad schrieb:

    std::string ist dann auch solange toll, bis man Unicode verwenden möchte und dabei bemerkt, dass std::string (unix utf-8) und std::wstring (im Falle von Windows) dafür nicht der Weisheit letzter Schluss sind.

    Das soll im kommenden Standard ja besser werden...


Anmelden zum Antworten