Zeichenfolgendatenverwaltung
Visual C++ bietet verschiedene Möglichkeiten zum Verwalten von Zeichenfolgendaten:
Zeichenfolgenmanipulation für die Arbeit mit C-Format
NULL
-terminated stringsWin32-API-Funktionen zum Verwalten von Zeichenfolgen
Klasse von
CStringT
MFC, die flexible, größenveränderbare Zeichenfolgenobjekte bereitstelltClass
CStringT
Class, which provides an MFC-independent string object with the same functionality asCString
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 CString
von S- und Standard-C++-Zeichenfolgendatentypen bereit. Da CString
sie nicht abgeleitet CObject
ist, 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 CString
fü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 Chicago
erstellen, 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.