CString
Vorgänge im Zusammenhang mit Zeichenfolgen im C-Stil
Ein CString
Objekt enthält Zeichenfolgendaten. CString
erbt den Satz der Methoden und Operatoren, die in der Klassenvorlage CStringT
definiert sind, um mit Zeichenfolgendaten zu arbeiten. (CString
ist eine typedef
, die spezialisiert ist CStringT
, mit der Art von Zeichendaten zu arbeiten, die CString
unterstützt werden.)
CString
speichert Keine Zeichendaten intern als null-gekündigte Zeichenfolge im C-Stil. 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-Stil und bietet Möglichkeiten, auf Zeichendaten als C-Formatzeichenfolge 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.
Arbeiten mit standardmäßigen Laufzeitbibliothekszeichenfolgenfunktionen
Verwenden von
CString
Objekten mit Variablenargumentfunktionen
Verwenden CString
als C-Style Null-Terminated String
Um ein CString
Objekt als C-Formatzeichenfolge zu verwenden, wandeln Sie das Objekt in LPCTSTR
. 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 temporär und wird ungültig, wenn eine Änderung vorgenommen CString
wird. CString
kann auch den gültigen Bereich verlassen und automatisch gelöscht werden. Es wird empfohlen, jedes Mal, wenn Sie ein Objekt verwenden, einen neuen LPCTSTR
Zeiger eines CString
Objekts zu erhalten.
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 unicode/MBCS-portable _tcscpy_s
) ist entweder ein const wchar_t*
(Unicode) oder ein const char*
(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 Laufzeitbibliothekszeichenfolgenfunktionen
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-Laufzeitzeichenfolgenfunktionen verwenden müssen, können Sie die unter "Using CString
as a C-style null-terminated string" beschriebenen Techniken verwenden. 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 GetBuffer
und ReleaseBuffer
zugreifen Sie auf den internen Zeichenpuffer eines CString
Objekts
Rufen Sie
GetBuffer
für einCString
-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 dasCString
-Objekt zu schreiben.Rufen Sie
ReleaseBuffer
für dasCString
-Objekt auf, um alle internenCString
-Statusinformationen, z. B. die Länge der Zeichenfolge, zu aktualisieren. Nachdem Sie die Inhalte einesCString
-Objekts direkt geändert haben, müssen SieReleaseBuffer
aufrufen, bevor Sie eine andereCString
-Memberfunktion aufrufen.
Verwenden von CString
Objekten mit Variablenargumentfunktionen
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.
Wenn Sie ein CString
Objekt in einer Variablenargumentfunktion verwenden möchten, wandeln Sie das CString
Objekt 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 formaler CString
Parameter
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 an ein TCHAR
Array, eine Literalzeichenfolge ["hi there"
] oder ein CString
Objekt übergeben. Das CString
Objekt wird automatisch in ein LPCTSTR
. Jeder Ort, an dem Sie ein LPCTSTR
Objekt verwenden können, können Sie auch ein CString
Objekt verwenden.
Sie können auch einen formalen Parameter als Konstantenzeichenfolgenverweis (d. h. ) angeben, const CString&
wenn das Argument nicht geändert wird. Legen Sie den const
Modifizierer ab, wenn die Zeichenfolge von 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.