Problem beim erstellen eines Objekts mit new
-
Der Code funktioniert garnicht (undefiniertes Verhalten) Der Pointer zeigt auf irgendeine Adresse. Es wurde weder eine gültige Adresse auf dem Stack angegeben ) noch Speicher auf dem Heap für den String reserviert. Wie ich in meinem Post vorher schon erläutert habe.
Ein String wird immer mit '\0' abgeschlossen. somit hat ein char array[6] auch nur maximal 5 Zeichen, da das Sechste für die Nullterminierung benötigt wird. Strings in Anführungszeichen angegeben haben eine Nullterminierung.
-
HighLigerBiMBam schrieb:
Der Code funktioniert garnicht (undefiniertes Verhalten) Der Pointer zeigt auf irgendeine Adresse. Es wurde weder eine gültige Adresse auf dem Stack angegeben ) noch Speicher auf dem Heap für den String reserviert. Wie ich in meinem Post vorher schon erläutert habe.
Bei mir gehts schon die ausgabe ist "Test!"
soweit ich weiß ist
char* t = "blubb";die verkürzte version von
char *t; t = "blubb";
-
Nein, die richtige

-
314159265358979 schrieb:
Nein, die richtige

okay und was ist an der anderen falsch??
-
Das const fehlt.
-
314159265358979 schrieb:
Das const fehlt.
vielleicht sollte meine Variable auch gar keine Konstanste sein?

-
Wenn du den string so zuweist, MUSS sie const sein.
-
wasd schrieb:
Ich versteh nicht, wie das Programm funktionieren kann, da erstens bei der initialisierung der * vor dem t fehlt und die Ausgabe dann doch eigentlich die Adresse sein müsste?
Du weist die Adresse des Stringliterals dem
char-Zeiger zu. Die Ausgabe funktioniert, weil der Stream-Operator fürchar*überladen ist.wasd schrieb:
vielleicht sollte meine Variable auch gar keine Konstanste sein?
Ist sie so oder so nicht. Aber der Zeiger soll auf
constzeigen. "Der string liegt aber in einem Read-Only bereich, du darfst da also nichts ändern." Daher ist bei Stringliteralen nurconst char*sinnvoll.Wo liegt dein momentanes Problem?
-
Hast du das gelesen?
wasd schrieb:
soweit ich weiß ist
char* t = "blubb";die verkürzte version von
char *t; t = "blubb";Nein. Kürzlich gab es wieder ein Thread darüber. Der erste Code ruft den Ctor auf und der zweite den Zuweisungsoperator. Bei korrekter Implentierung spielt es keine Rolle. Aber beim ersten wird der Ctor aufgerufen und beim zweiten wird der Ctor und der Zuweisungsoperator aufgerufen.
-
EOutOfResources schrieb:
Der erste Code ruft den Ctor auf
char*hat keinen Konstruktor. Bei skalaren Typen macht sind beide Schreibweisen äquivalent. Allerdings ist eine schnelle Initialisierung zu bevorzugen, bei der zweiten Version sehe ich keine Vorteile.