CString Operations Relating to C-Style Strings
Ein CString-Objekt enthält Zeichenfolgendaten. CString übernimmt den Satz an Methoden und Operatoren, die in der Klassenvorlage CStringT für die Nutzung mit Zeichenfolgendaten definiert wurden. (CString ist eine typedef, die CStringT spezialisiert, damit sie mit den Zeichendaten genutzt werden kann, die CString unterstützt.)
CString speichert keine Zeichendaten intern als auf NULL abschließende Zeichenfolge im C-Format. Stattdessen zeichnet CString die Länge der Zeichendaten auf, sodass die Daten und der benötigte Speicherplatz besser überwacht werden können.
CString akzeptiert Zeichenfolgen im C-Format und bietet Methoden, um auf Zeichendaten als eine Zeichenfolge im C-Format zuzugreifen. Dieses Thema enthält die folgenden Abschnitte, in denen Sie erfahren, wie Sie ein CString-Objekt als auf NULL abschließende Zeichenfolge im C-Format verwenden können.
Konvertieren in auf NULL abschließende Zeichenfolgen im C-Format
Arbeiten mit standardmäßigen Funktionen für Laufzeitbibliothek-Zeichenfolgen
Direktes Ändern von CString-Inhalten
Verwenden von CString-Objekten mit variablen Argumentsfunktionen
Angeben von formalen CString-Parametern
Verwenden von CString als eine auf NULL abschließende Zeichenfolge im C-Format
Um ein CString-Objekt als Zeichenfolge im C-Format zu verwenden, wandeln Sie das Objekt in LPCTSTR um. Im folgenden Beispiel gibt CString einen Zeiger auf eine schreibgeschützte auf NULL abschließende Zeichenfolge im C-Format zurück. Die strcpy-Funktion fügt eine Kopie der Zeichenfolge im C-Format in der Variablen myString ein.
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);
Sie können CString-Methoden, z. B. SetAt, verwenden, um einzelne Zeichen im Zeichenfolgenobjekt zu ändern. Der LPCTSTR-Zeiger ist jedoch nur temporär und wird ungültig, wenn Änderungen an CString vorgenommen werden. CString kann auch den gültigen Bereich verlassen und automatisch gelöscht werden. Wir empfehlen nach jeder Nutzung einen aktuellen LPCTSTR-Zeiger eines CString-Objekts abzurufen.
Gelegentlich benötigen Sie eine Kopie der CString-Daten, um direkte Änderungen vorzunehmen. Verwenden Sie die sicherere Funktion strcpy_s (oder die Unicode/MBCS-portable Funktion _tcscpy_s), um das CString-Objekt in einen eigenen Puffer zu kopieren. Dort können die Zeichen sicher geändert werden, wie im folgenden Beispiel gezeigt.
CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want
Hinweis
Das dritte Argument für strcpy_s (oder das Unicode/MBCS-portable _tcscpy_s) ist entweder constwchar_t* (Unicode) oder constchar* (ANSI).Das oben stehende Beispiel übergibt einen CString für dieses Argument.Der C++-Compiler wendet automatisch die Konvertierungsfunktion an, die für die CString-Klasse definiert wurde, mit der ein CString in einen LPCTSTR konvertiert wird.Die Fähigkeit, Umwandlungsvorgänge von einem Typ in einen anderen zu definieren, ist eine der nützlichsten Funktionen von C++.
Arbeiten mit standardmäßigen Funktionen für Laufzeitbibliothek-Zeichenfolgen
Sie sollten eine CString-Methode finden können, um einen beliebigen Zeichenfolgenvorgang durchzuführen, für den Sie die standardmäßigen Funktionen fürC-Laufzeit-Bibliothekszeichenfolgen wie strcmp (oder das Unicode/MBCS-portable _tcscmp) in Betracht ziehen könnten.
Wenn Sie die C-Laufzeit-Zeichenfolgenfunktionen verwenden müssen, können Sie die im folgenden Abschnitt beschriebenen Techniken verwenden: Konvertieren in auf NULL abschließende Zeichenfolgen im C-Format_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string. Sie können das CString-Objekt in einen entsprechenden Zeichenfolgenpuffer im C-Format kopieren, die Vorgänge durchführen und dann die resultierende Zeichenfolge im C-Format wieder einem CString-Objekt zuweisen.
Direktes Ändern von CString-Inhalten
In den meisten Situationen sollten Sie CString-Memberfunktionen verwenden, um die Inhalte eines CString-Objekts zu ändern oder um den CString in eine Zeichenfolge im C-Format zu konvertieren.
Es gibt einige Situationen, in denen es sinnvoll ist, die CString-Inhalte direkt zu ändern, z. B. wenn Sie mit Betriebssystemfunktionen arbeiten, die einen Zeichenpuffer benötigen.
Die GetBuffer- und ReleaseBuffer-Methoden bieten Zugriff auf den internen Zeichenpuffer eines CString-Objekts, sodass Sie es direkt ändern können. Die folgenden Schritte zeigen Ihnen, wie Sie diese Funktionen zu diesem Zweck verwenden können.
So verwenden Sie GetBuffer und ReleaseBuffer für den Zugriff auf den internen Zeichenpuffer eines CString-Objekts
Rufen Sie GetBuffer für ein CString-Objekt auf, und geben Sie die Länge des benötigten Puffers an.
Verwenden Sie den von GetBuffer zurückgegebenen Zeiger, um Zeichen direkt in das CString-Objekt zu schreiben.
Rufen Sie ReleaseBuffer für das CString-Objekt auf, um alle internen CString-Statusinformationen, z. B. die Länge der Zeichenfolge, zu aktualisieren. Nachdem Sie die Inhalte eines CString-Objekts direkt geändert haben, müssen Sie ReleaseBuffer aufrufen, bevor Sie eine andere CString-Memberfunktion aufrufen.
Verwenden von CString-Objekten mit variablen Argumentsfunktionen
Einige C-Funktionen haben eine variable Anzahl an Argumenten. Ein bedeutsames Beispiel ist printf_s. Aufgrund der Art und Weise, in der diese Funktion deklariert wird, kann der Compiler sich nicht über den Typ der Argumente sicher sein, und er kann nicht bestimmen, welcher Konvertierungsvorgang für jedes Argument durchgeführt werden muss. Daher ist es sehr wichtig, dass Sie eine explizite Typumwandlung verwenden, wenn Sie ein CString-Objekt an eine Funktion übergeben, die eine variable Anzahl an Argumenten haben kann.
Um ein CString-Objekt in einer variablen Argumentsfunktion zu verwenden, wandeln Sie CString explizit in eine LPCTSTR-Zeichenfolge um, wie im folgenden Beispiel gezeigt.
CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);
Angeben von formalen CString-Parametern
Bei den meisten Funktionen, die ein Zeichenfolgenargument benötigen, ist es am besten, den formalen Parameter im Funktionsprototypen als einen const-Zeiger auf ein Zeichen (LPCTSTR) anstelle eines CString anzugeben. Wenn ein formaler Parameter als const-Zeiger auf ein Zeichen angegeben wird, können Sie entweder einen Zeiger auf ein TCHAR-Array, eine Literalzeichenfolge ["hi there"], oder ein CString-Objekt übergeben. Das CString-Objekt wird automatisch in LPCTSTR konvertiert. Überall dort, wo Sie einen LPCTSTR verwenden können, können Sie auch ein CString-Objekt verwenden.
Sie können auch einen formalen Parameter als einen Konstantenzeichenfolgenverweis angeben (z. B. constCString&), wenn das Argument nicht geändert wird. Legen Sie den const-Modifizierer ab, wenn die Zeichenfolge mit der Funktion geändert wird. Wenn ein standardmäßiger NULL-Wert gewünscht ist, initialisieren Sie es mit der NULL-Zeichenfolge [""], wie nachfolgend beschrieben:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Bei den meisten Funktionsergebnissen können Sie einfach ein CString-Objekt nach Wert zurückgeben.