Zeichenfolgendatenverwaltung

Visual C++ bietet verschiedene Möglichkeiten zum Verwalten von Zeichenfolgendaten:

  • Zeichenfolgenmanipulation für die Arbeit mit C-Format NULL-terminated strings

  • Win32-API-Funktionen zum Verwalten von Zeichenfolgen

  • Klasse von CStringTMFC, die flexible, größenveränderbare Zeichenfolgenobjekte bereitstellt

  • Class CStringT Class, which provides an MFC-independent string object with the same functionality as CString

Fast alle Programme arbeiten mit Zeichenfolgendaten. Die Klasse von CString MFC ist häufig die beste Lösung für die flexible Zeichenfolgenverarbeitung. Ab Version 7.0 CString können sie in MFC- oder MFC-unabhängigen Programmen verwendet werden. Sowohl die Laufzeitbibliothek als CString auch die Unterstützung von Zeichenfolgen, die Multibytezeichen (breit) enthalten, wie bei der Unicode- oder MBCS-Programmierung.

In diesem Artikel werden die allgemeinen Dienste beschrieben, die die Klassenbibliothek im Zusammenhang mit der Zeichenfolgenmanipulation bereitstellt. In diesem Artikel werden die folgenden Themen behandelt:

Die CStringT Class-Klasse bietet Unterstützung für das Bearbeiten von Zeichenfolgen. Sie soll die Funktionalität ersetzen und erweitern, die normalerweise vom C-Laufzeitbibliothekszeichenfolgenpaket bereitgestellt wird. Die CString Klasse stellt Memberfunktionen und Operatoren für eine vereinfachte Zeichenfolgenbehandlung bereit, ähnlich wie in Basic. Die Klasse stellt außerdem Konstruktoren und Operatoren zum Erstellen, Zuweisen und Vergleichen CStringvon S- und Standard-C++-Zeichenfolgendatentypen bereit. Da CString sie nicht abgeleitet CObjectist, können Sie Objekte unabhängig von den meisten Microsoft Foundation Class Library (MFC) verwenden CString .

CString Objekte folgen "Wertsemantik". Ein CString Objekt stellt einen eindeutigen Wert dar. Stellen Sie sich eine CString tatsächliche Zeichenfolge vor, nicht als Zeiger auf eine Zeichenfolge.

Ein CString Objekt stellt eine Sequenz einer variablen Anzahl von Zeichen dar. CString Objekte können als Arrays von Zeichen betrachtet werden.

Unicode und MBCS bieten Portabilität

Mit MFC, Version 3.0 und höher, ist MFC einschließlich CStringfür Unicode- und Multibyte-Zeichensätze (MBCS) aktiviert. Diese Unterstützung erleichtert Es Ihnen, portable Anwendungen zu schreiben, die Sie für Unicode- oder ANSI-Zeichen erstellen können. Um diese Portabilität zu aktivieren, ist jedes Zeichen in einem CString Objekt vom Typ TCHAR, der so definiert ist, als wchar_t ob Sie das Symbol _UNICODE beim Erstellen der Anwendung definieren oder wie char nicht. Ein wchar_t Zeichen ist 16 Bit breit. MBCS ist aktiviert, wenn Sie mit dem definierten Symbol _MBCS erstellen. MFC selbst wird entweder mit dem Symbol (für die NAFX-Bibliotheken) oder dem _MBCS _UNICODE Symbol (für die UAFX-Bibliotheken) erstellt.

Hinweis

Die CString Beispiele in diesem und den zugehörigen Artikeln zu Zeichenfolgen zeigen literale Zeichenfolgen, die ordnungsgemäß für Unicode-Portabilität formatiert sind, mithilfe des _T Makros, das die Literalzeichenfolge in das Formular übersetzt:

L"literal string"

Hinweis

der Compiler als Unicode-Zeichenfolge behandelt. Beispielsweise folgender Code:

CString strName = _T("Name");   

Hinweis

wird als Unicode-Zeichenfolge übersetzt, wenn _UNICODE diese definiert oder als ANSI-Zeichenfolge angegeben ist. Weitere Informationen finden Sie im Artikel Unicode- und Multibyte-Zeichensatzunterstützung (MBCS).

Ein CString Objekt kann bis zu INT_MAX (2.147.483.647) Zeichen speichern. Der TCHAR Datentyp wird verwendet, um einzelne Zeichen innerhalb eines CString Objekts abzurufen oder festzulegen. Im Gegensatz zu Zeichenarrays verfügt die CString Klasse über eine integrierte Speicherzuordnungsfunktion. Auf diese Weise können CString Objekte bei Bedarf automatisch wachsen (d. h., Sie müssen sich keine Gedanken darüber machen, dass ein CString Objekt an längere Zeichenfolgen angepasst wird).

CStrings und const char Zeiger

Ein CString Objekt kann auch wie eine literale C-Style-Zeichenfolge (eine PCXSTR, die identisch ist, wie const char* bei Unicode). Der Konvertierungsoperator CSimpleStringT::operator PCXSTR ermöglicht CString es Objekten, frei für Zeichenzeiger in Funktionsaufrufen zu ersetzen. Mit dem CString(LPCWSTR pszSrc) Konstruktor können Zeichenzeiger durch CString Objekte ersetzt werden.

Es wird kein Versuch unternommen, Objekte zu falten CString . Wenn Sie zwei CString Objekte Chicagoerstellen, die z. B. die Zeichen enthalten Chicago , werden an zwei Stellen gespeichert. (Dies gilt möglicherweise nicht für zukünftige Versionen von MFC, daher sollten Sie nicht davon abhängen.)

Hinweis

Verwenden Sie die CSimpleStringT::GetBuffer Funktionen und CSimpleStringT::ReleaseBuffer Memberfunktionen, wenn Sie direkt auf einen CString als nicht zusammenhängenden Zeiger auf ein Zeichen zugreifen müssen.

Hinweis

Verwenden Sie die Funktionen und CStringT::SetSysString Member, um Objekte zuzuweisen und festzulegenBSTR, die CStringT::AllocSysString in der Automatisierung (früher als OLE-Automatisierung bezeichnet) verwendet werden.

Hinweis

Weisen Sie CString nach Möglichkeit Objekte auf dem Frame und nicht auf dem Heap zu. Dadurch wird Arbeitsspeicher gespart und das Übergeben von Parametern vereinfacht.

Die CString Klasse wird nicht als Microsoft Foundation Class Library-Auflistungsklasse implementiert, obwohl CString Objekte sicherlich als Elemente in Sammlungen gespeichert werden können.

CString Referenzzählung

Ab MFC Version 4.0 erhöht MFC beim CStringT Kopieren von Klassenobjekten eine Verweisanzahl, anstatt die Daten zu kopieren. Dadurch wird die Übergabe von Parametern nach Wert und das CString Zurückgeben von Objekten nach Wert effizienter. Diese Vorgänge führen dazu, dass der Kopierkonstruktor aufgerufen wird, manchmal mehrmals. Durch das Erhöhen einer Verweisanzahl wird dieser Aufwand für diese allgemeinen Vorgänge reduziert und die Verwendung CString einer attraktiveren Option erleichtert.

Da jede Kopie zerstört wird, wird die Verweisanzahl im ursprünglichen Objekt verringert. Das ursprüngliche CString Objekt wird erst zerstört, wenn die Referenzanzahl auf Null reduziert wird.

Sie können die CString Memberfunktionen CSimpleStringT::LockBuffer verwenden und CSimpleStringT::UnlockBuffer die Verweiszählung deaktivieren oder aktivieren.

Siehe auch

Allgemeine MFC-Themen