.| Autor | Beitrag |
|---|---|
|
000 30.12.2003, 23:15 Ready |
Hallo zusammen, ich lerne zu Zeit ein wenig c++ mit Hilfe des Buches : "C++ Einführung und professionelle Programmierung 6. Auflage" von Ulrich Breymann. Als eine Übungsaufgabe soll ich eine Funktion schreiben, die den Inhalt eines Strings in einen anderen kopiert, wobei vorgegeben ist das der Ziel-String genug platz hat. Ich war mir eigentlich ziemlich sicher wie ich die Funktion schreibe und das ist dabei herausgekommen :
MfG Ready --Dieser Beitrag wurde am 30.12.2003 um 23:16 von Ready bearbeitet. |
|
Profil || Suche |
|
001 30.12.2003, 23:45 KillerDoc |
Naja 1. vertauscht die funktion die Strings nicht, sondern kopiert nur den 2. auf den 1. Aber egal das is ja nicht das Problem. Das Problem warum das nicht geht ist das du nicht auf string2 schreiben darfst da string2 auf dem Stack liegt. Damit die Funktion dorthin schreiben kann müsstest du den Speicher mittels malloc bzw new im Heap reservieren. Das machst du folgendermaßen: char *string2 = (char *)malloc(512); //statt 512 halt wieviel bytes(zeichen) an speicher du brauchst. statt char* string2 = "Mir gehts echt gut!"; Dann sollts gehn. Am Schluss (zb vor return 0;) nicht vergessen den reservierten Speicher wieder freizugeben mittels free(string2); Weiß aber nicht ob dir das so viel hilft wenn ich das so schreibe. Wurde das in dem Buch noch nicht behandelt? --lazy sunday afternooon |
|
Profil || Suche |
|
002 30.12.2003, 23:52 Ready |
Jetzt verstehe ich : Ich muss den Speicher für die Strings im Heap erzeugen, auf den die Zeiger dann später zeigen. Oder hab ich das jetzt falsch verstanden ? Das bedeutet doch eigentlich wenn ich jetzt eine Referenz des Zeigers übergeben würde sprich :
Dieser Beitrag wurde am 30.12.2003 um 23:53 von Ready bearbeitet. |
|
Profil || Suche |
|
003 31.12.2003, 00:02 KillerDoc |
Naja wenn du den Speicher für die Strings im Heap reservierst und die Zeiger darauf zeigen lässt sollte es sowieso kein Problem mehr geben. Ob du die Zeiger jetzt per Referenz oder per Wert übergibst ist egal. Wenn per Referenz allerdings char* &ziel und nicht char& *ziel... lazy sunday afternooon |
|
Profil || Suche |
|
004 31.12.2003, 00:23 CN |
oder du machst Dieser Beitrag wurde am 31.12.2003 um 00:23 von CN bearbeitet. |
|
Profil || Suche |
|
005 31.12.2003, 03:10 Leviathan |
Die Art der Übergabe ist hier überhaupt nicht das Problem, die ist so am Besten, wie sie im ersten Post steht. Das Problem ist, dass mit Entities: HL | HL² |
|
Profil || Suche |
|
006 31.12.2003, 03:50 KillerDoc |
Naja das die Funktion vom/ins leere liest/schreibt stimmt nicht... char *string1 = "Hallo, wie gehts?"; erzeugt den zeiger string1 auf dem stack und setzt ihn auf den String "Hallo, wie gehts?". Das Problem ist das der String in dem Fall an einer Stelle gespeichert ist, an die man keinen Schreibzugriff hat. Lesen geht aber auf jeden Fall. Und nachdem string1 hier eh nur gelesen wird gibts da kein Problem. Wenn man Schreib Zugriff auf den den Speicher braucht lässt sich das entweder eben durch malloc/new lösen, indem man den Speicher im Heap anfordert, oder so wie CN zeigt indem man keinen char Zeiger sondern ein char Array erstellt, weil dann der ganze String am Stack landet und ned nur der Zeiger. --lazy sunday afternooon |
|
Profil || Suche |
|
007 31.12.2003, 10:24 Ready |
Danke erstmal für die vielen antworten :) |
|
Profil || Suche |
|
008 01.01.2004, 01:15 theDon |
/e: whargs, stimmt ja garnicht. --\o tanz den naziprau! o/ And more than ever, I hope to never fall, Dieser Beitrag wurde am 01.01.2004 um 01:15 von theDon bearbeitet. |
|
Profil || Suche |

