In erster Linie möchte ich klarstellen, dass dies eine frühere Hausaufgabe ist, die ich hatte, aber nicht herausfinden konnte und dass ich immer noch versuche, meinen Kopf einzuwickeln . Dies sind die Anweisungen für den sekundären Konstruktor:Bestimmen der maximalen Kapazität eines Char-Pointers in der dynamischen Speicherzuweisung
NIUString :: NIUString (const char * andere)
Dieser Konstruktor für die NIUString Klasse sollte ein neues
NIUString
Objekt an den C-Stringother
initialisieren. Die erforderliche Logik lautet:
Legen Sie die Zeichenfolgengröße für das neue Objekt auf die Länge der C-Zeichenfolgeother
fest.
Legen Sie die Zeichenfolgenkapazität für das neue Objekt auf die Zeichenfolgengröße fest.
Wenn die String-Kapazität 0 ist, legen Sie den String-Array-Zeiger für das neue Objekt aufnullptr
fest. Andernfalls verwenden Sie den String-Array-Zeiger für das neue Objekt, um ein Array von char zuzuweisen. Die Anzahl der Elemente im neuen String-Array sollte der String-Kapazität entsprechen.
Kopieren Sie die Zeichen der C-Zeichenfolgeother
(bis einschließlich, jedoch ohne das Nullzeichen) in das Zeichenfolgenarray.
Für meine Ausgabe soll ich
testet den zweiten Konstruktor
s2 erhalten: einen Text
s2 Größe: 9
s2 Kapazität:
s2 ist nicht leer
aber stattdessen bekomme ich ...
an zweiter Stelle Konstruktor testen
nicht leer ist
s2: einen Text
Größe s2: 9
s2 Kapazität:
s2
Nach Recherchen erfuhr ich, dass das, weil ist Sie können sizeof
nicht für einen Zeiger verwenden, da er Ihnen nur die Größe des Zeigers im Speicher und nicht die tatsächliche Größe der Zeichenfolgenkapazität angibt.
Hier ist mein Code für die Methode schrieb ich
//secondary constructor
NIUString::NIUString(const char* other)
{
Capacity = sizeof(other);
Size = strlen(other);
if (Capacity == 0)
{
arrayPoint = nullptr;
}
else
arrayPoint = new char[Capacity];
strcpy(arrayPoint, other);
}
Wie dem auch sei, meine Frage ist: Was ist die Art und Weise, in der dies getan werden kann? Ich habe ein bisschen daran gearbeitet, aber ich habe kein Beispiel gefunden, das ähnlich genug ist, um mir zu helfen. Wenn mich jemand in die richtige Richtung führen kann, wäre das sehr nützlich.
Dies ist der Code, den ich verwende, um meine Methode/Klasse zu testen; Alles andere funktioniert gut, außer der Kapazität des Arrays.
NIUString s2 = "some text";
cout << "s2: " << s2 << endl;
cout << "s2 size: " << s2.size() << endl;
cout << "s2 capacity: " << s2.capacity() << endl;
cout << "s2 is " << ((s2.empty()) ? "empty\n" : "not empty\n");
cout << endl <<endl << endl;
'sizeof (andere);' ist invariant: Die Größe eines beliebigen Zeigers. –
Was ist Kapazität? Ist das nicht die gleiche Größe? Wonach suchst du genau? – perencia
Können Sie die Signatur des Konstruktors ändern? – Fearnbuster