Terminierungszeichen ersetzen durch ' '
-
Hi an alle!
Ich habe im Zuge meines Studiums die Aufgabe, eine eigene Klasse für Strings zu erstellen, die intern die Strings nicht mit '\0' terminiert. Es soll also einen Konstruktor geben, der das Term.-Zeichen quasi abschneidet.String(char *param) { laenge = 0; zk = param; while(*zk != '\0') { zk++; laenge++; } zk -=laenge; zk[laenge] = ' '; // -> Speicherzugriffsfehler }Könnt ihr mir weiterhelfen?
Gruß,
DeeJay0703
-
dennisJ schrieb:
Hi an alle!
Ich habe im Zuge meines Studiums die Aufgabe, eine eigene Klasse für Strings zu erstellen, die intern die Strings nicht mit '\0' terminiert. Es soll also einen Konstruktor geben, der das Term.-Zeichen quasi abschneidet.Steht in der Aufgabenstellung wirklich, dass das terminale Nullzeichen abgeschnitten werden muss? Geht es nicht eher darum, dass ihr ganz grundsätzlich den String unabängig von Nullzeichen verwalten sollt, indem ihr seine Länge separat speichert?
-
Dein Beispiel geht schon deshalb nicht, weil du zk zum einen hochzählst und zum anderen auch noch über den Index zugreifst. Das ist doppelt gemoppelt.
Also entweder nicht hochzählen und zk[laenge] verwenden oder hochzählen und *zk verwenden.

-
String(const char* str) : m_laenge(std::strlen(str)), m_zk(new char[std::strlen(str)]) { std::memcpy(m_zk, str, m_laenge * sizeof(char)); }ist glaube ich das, was du machen willst ...
-
(D)Evil schrieb:
std::memcpy(m_zk, str, m_laenge * sizeof(char));Immer wieder dasselbe: Wieso nicht 'std::copy'? Ich finde das unendlich viel eleganter, und vor allem leichter zu verstehen.
-
Konrad Rudolph schrieb:
Steht in der Aufgabenstellung wirklich, dass das terminale Nullzeichen abgeschnitten werden muss? Geht es nicht eher darum, dass ihr ganz grundsätzlich den String unabängig von Nullzeichen verwalten sollt, indem ihr seine Länge separat speichert?
Ich glaube du hast recht. Aber was würde das bringen? Verstehe nicht ganz was dann dahinterstecken soll.
-
@Konrad Rudolph: Weil er wahrscheinlich eh <cstring> einbinden wird, deswegen also 1. kein neuer Header dazu kommt(ok scheiß argument ^^) und 2. hast recht ^^