Freigeben über


CString Vorgänge im Zusammenhang mit Zeichenfolgen im C-Stil

Ein CString Objekt enthält Zeichenfolgendaten. CStringerbt 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.

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 CStringwird. 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

  1. Rufen Sie GetBuffer für ein CString-Objekt auf, und geben Sie die Länge des benötigten Puffers an.

  2. Verwenden Sie den von GetBuffer zurückgegebenen Zeiger, um Zeichen direkt in das CString-Objekt zu schreiben.

  3. 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 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 LPCTSTRObjekt 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.

Siehe auch

Zeichenfolgen (ATL/MFC)
CString Übergeben von Argumenten