thundermare Geschrieben 21. August 2006 Geschrieben 21. August 2006 hallo, ich mache eigentlich schon ziemlich lange c++ habe aber trotzdem eine ziemliche noob frage :-). normalerweise würde ich auch eine stringklasse benutzen aber unser lehrer hat sie nicht mehr alle... wieso führt folgender code zum laufzeitfehler ? int main() { char *test = new char[100]; test = "hallo"; delete[] test; //führt zum fehler return 0; }
k4fu Geschrieben 21. August 2006 Geschrieben 21. August 2006 wieso führt folgender code zum laufzeitfehler ? int main() { delte[] test; //führt zum fehler } ka... aber delete schreibt man auf jedenfall so: del[e]te
Klotzkopp Geschrieben 21. August 2006 Geschrieben 21. August 2006 Durch die Zuweisung test = "hallo""verbiegst" du deinen Zeiger auf die Adresse des Stringliterals "hallo". Er zeigt damit nicht mehr auf den Speicher, den du mit new geholt hast. Das nachfolgende delete bekommt also die Adresse des Literals, und das kann nicht mit delete freigegeben werden. Benutz strcpy, oder besser gleich std::string.
thundermare Geschrieben 21. August 2006 Autor Geschrieben 21. August 2006 zum Thema benutz std::string ich sagte unser lehrer hat nicht mehr alle an der waffel, das dürfen wir nicht benutzen. aber strcpy darf ich verwenden danke @klotzkopp aber wie kann ich ein char array befüllen das ich mit new erstellt habe ausser miti char *test = new char[100]; test[0] = 'A'; delete[] test;
Guybrush Threepwood Geschrieben 21. August 2006 Geschrieben 21. August 2006 :confused: Wozu meinst du ist strcpy gut? und nur weil du etwas nicht verstehst hat nicht automatuisch der andere eine nander Waffel
thundermare Geschrieben 21. August 2006 Autor Geschrieben 21. August 2006 ich glaube wir reden aneinander vorbei das ist ein schulprojekt und wir sollen keine klassen verwenden!!! also auch nicht die klasse string es gibt ne handvoll ausnahmen die wir benutzen dürfen ifstream, ofstream... aber string gehört nicht dazu!!!
Klotzkopp Geschrieben 21. August 2006 Geschrieben 21. August 2006 das ist ein schulprojekt und wir sollen keine klassen verwenden!!!Ja und? strcpy ist keine Klasse. Wo ist denn noch das Problem, bzw. der Grund für multiple Satzzeichen?
thundermare Geschrieben 21. August 2006 Autor Geschrieben 21. August 2006 ich weiss das strcpy keine klasse ist ich wüsste nur gerne wie ich selbst so etwas umsetzen könnte. aber das ist jetzt auch egal weil ich einfach strcpy benutze :-) danke an alle die mir so schnell geholfen haben
Bubble Geschrieben 21. August 2006 Geschrieben 21. August 2006 ich weiss das strcpy keine klasse ist ich wüsste nur gerne wie ich selbst so etwas umsetzen könnte. Eine simple Implementierung ohne jede Form der Optimierung (ausser denen, die der Compiler vornimmt) und ohne Sicherheitscheck gegen ein Überschreiten von Buffergrenzen wäre z.B.: void MyStringCopy(char *dest, const char *src) { int i=0; while(src[i]!=0) { dest[i]=src[i]; i++; } dest[i]=0; } Mit einer Begrenzung auf eine maximale Stringlänge anhand der Größe des Ausgabepuffers könnte es z.B. so aussehen: void MyStringCopy2(char *dest, const char *src, const int DestinationBufferSize) { int i=0; const int max = (DestinationBufferSize / sizeof(char)) - 1; while(src[i]!=0 && i<max) { dest[i]=src[i]; i++; } dest[i]=0; }
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden