string Problem
-
Hi,
#include <iostream> using namespace std; int main() { string test; test[0] = 'b'; test[1] = 'l'; test[2] = 'a'; test[3] = 'h'; test[4] = '\0'; cout << test; //warum wird nichts angezeigt? char test2[5]; test2[0] = 'b'; test2[1] = 'l'; test2[2] = 'a'; test2[3] = 'h'; test2[4] = '\0'; cout << test2; return 0; }
-
Eigentlich wundert mich, dass es dir nicht abstürzt; du schreibst da in Speicher rum, der dir nicht gehört. So etwa könnte man das machen:
test.resize(4); test[0] = 'b'; test[1] = 'l'; test[2] = 'a'; test[3] = 'h';...oder halt stumpf
test = "blah";C++-Strings sind halt keine C-Strings.
-
Weil dein Code kaputt ist.
Der String ist leer. Mit "str[0] = 'C';" überschreibst du das erste Zeichen... es gibt jedoch kein erstes Zeichen zum überschreiben. An genau der Stelle hapert es.
Lösung: Im Konstruktor eine Größe übergeben, oder mittels .reserve() den String groß genug machen.
Übrigens: Die Funktion .at() macht dasselbe wie der operator[], nur dass sie prüft ob der Index gültig ist und ggf. eine Exception wirft.
-
.reserve reicht nicht, es reserviert nur Speicher. Die Größe des Strings bleibt unverändert, und es gibt nach wie vor kein erstes Zeichen zu überschreiben.
Es muss schon .resize sein.
-
Stimmt, danke für die Korrektur.

-
vielen dank für eure Hilfe

die '\0' kann ich also bei c++ strings einfach weglassen?
-
O.o schrieb:
vielen dank für eure Hilfe

die '\0' kann ich also bei c++ strings einfach weglassen?ja.