CString-Vorgänge in Bezug auf Zeichenfolgen in C-Format
Ein CString-Objekt enthält Zeichenfolgendaten.CString erbt den Satz Methoden und Operatoren, das in der Klassenvorlage CStringT definiert werden, um mit Zeichenfolgendaten zu bearbeiten.(CString ist typedef, das CStringT spezialisiert, um mit der Art von Zeichendaten zu bearbeiten, die CString unterstützt.)
CString speichert Textdaten intern nicht als eine auf NULL endende Zeichenfolge ein.Stattdessen verfolgt CString die Länge Textdaten, sodass sie die Daten und das Leerzeichen sicher überwachen kann, die erforderlich sind.
CString akzeptiert Zeichenfolgen in C-Format und stellt Methoden, von Textdaten als Zeichenfolge in C-Format zuzugreifen.Dieses Thema enthält folgende Abschnitte, die beschreiben, wie ein Objekt CString verwendet, als ob es eine auf NULL endende Zeichenfolge eine war.
Konvertieren auf NULL endende Zeichenfolgen zu den im C-Format
Arbeiten mit Standardlaufzeitbibliotheksstring-funktionen
CString-Inhalt direkt ändern
Verwenden der CString-Objekte mit variablen Argumentfunktionen
Angeben von CString-formalenParametern
Verwenden CString als eine auf NULL endende Zeichenfolge ein
Um ein Objekt CString als Zeichenfolge in C-Format zu verwenden, wandeln Sie das Objekt in LPCTSTR um.Im folgenden Beispiel gibt CString einen Zeiger auf eine schreibgeschützte auf NULL endende Zeichenfolge im C-Format zurück.Die strcpy-Funktion legt eine Kopie der Zeichenfolge im C-Format in variable myString ein.
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);
Sie können CString-Methoden beispielsweise SetAt verwenden, um einzelne Zeichen im Zeichenfolgenobjekt zu ändern.Es ist der LPCTSTR Zeiger temporäre und ist ungültig, wenn eine Änderung an CString vorgenommen wird.CString kann auch den Gültigkeitsbereich verlassen und automatisch gelöscht werden.Es wird empfohlen, einen neuen LPCTSTR Zeiger eines Objekts CString jedes Mal abrufen, dem Sie ein verwenden.
Gelegentlich benötigen Sie möglicherweise eine Kopie von CString Daten, um sich direkt zu ändern.Verwenden Sie die Funktion strcpy_s gesicherte (oder das Unicode/MBCS-portable _tcscpy_s) das CString-Objekt in einen separaten Puffer zu kopieren.Dies ist, wo Zeichen sicher geändert werden können, wie dargestellt durch das folgende Beispiel.
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 in Unicode/MBCS-portable _tcscpy_s) ist entweder constwchar_t* (Unicode) oder constchar* (ANSI).Die oben erwähnten übergibt des Beispiels CString für dieses Argument.Der C++-Compiler wird automatisch die Konvertierungsfunktion, die die CString-Klasse definiert wird, die CString zu LPCTSTR konvertiert.Die Möglichkeit, Umwandlungsvorgänge von einem Typ in einen anderen zu definieren ist eine der nützlichsten Funktionen von C++. |
Arbeiten mit Standardlaufzeitbibliotheks-String-Funktionen
Sie sollten in der Lage sein, eine CString-Methode zu finden, jede Zeichenfolgenoperation auszuführen, für die Sie möglicherweise empfehlenswert, die Standardc-laufzeitbibliotheks-String-Funktionen wie strcmp (oder das Unicode/MBCS-portable _tcscmp) verwenden.
Wenn Sie die C-Laufzeit-String-Funktionen verwenden müssen, können Sie die Techniken verwenden, die in Konvertieren auf NULL endende Zeichenfolgen zu den im C-Format_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string beschrieben werden.Sie können das CString-Objekt in einen geeigneten Zeichenfolgenpuffer kopieren im C-Format, führen die Vorgänge auf den Puffer aus und anschließend die resultierende Zeichenfolge im C-Format zurück in ein CString-Objekt zu.
CString-Inhalt direkt ändern
In den meisten Fällen sollten Sie CString-Memberfunktionen verwenden, um den Inhalt eines Objekts CString zu ändern oder CString zu er-ähnlich eine Zeichenfolge zu konvertieren.
Es gibt Situationen, in denen es sinnvoll ist, den CString Inhalt direkt ändern können zum beispielsweise mit Betriebssystemfunktionen arbeiten, die einen Zeichenpuffer erfordern.
Der GetBuffer und ReleaseBuffer-Methodenangebotzugriff auf den internen Zeichenpuffer von CString ein Objekt und können Sie es direkt ändern.Die folgenden Schritte zeigen, wie diese Features zu diesem Zweck verwendet.
So GetBuffer und ReleaseBuffer verwenden, um auf den internen Zeichenpuffer eines CString-Objekts zuzugreifen
Rufen Sie GetBuffer für ein CString-Objekt und geben Sie die Länge des Puffers an, den Sie benötigen.
Verwenden Sie den Zeiger, der durch GetBuffer zurückgegeben wird, um Zeichen direkt in das CString-Objekt schreiben.
Rufen Sie ReleaseBuffer für das CString-Objekt auf, um alle internen CString Zustandsinformationen beispielsweise die Länge der Zeichenfolge zu aktualisieren.Nachdem Sie sich ändern, wendet der Inhalt von CString direkt, müssen Sie ein ReleaseBuffer aufrufen, bevor andere CString-Memberfunktionen aufrufen.
Verwenden der CString-Objekte mit variablen Argument-Funktionen
Einige C-Funktionen nehmen eine variable Anzahl von Argumenten.Ein wichtiges Beispiel ist printf_s.Aufgrund der Methode wird diese Art von Funktion deklariert, kann der Compiler nicht vom Typ der Argumente sicher sein und kann nicht bestimmen, die für jedes Argument auszuführen, die Konvertierungsoperation.Daher ist es wichtig, dass Sie explizite Typumwandlung verwenden, wenn Sie ein CString-Objekt an eine Funktion übergeben, die eine variable Anzahl von Argumenten akzeptiert.
Um ein CString-Objekt in einer variablen Argumentfunktion zu verwenden, wandeln Sie explizit CString zu einer LPCTSTR Zeichenfolge, wie im folgenden Beispiel gezeigt um.
CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);
Angeben von CString-formalenParametern
Für die meisten Funktionen, die ein Zeichenfolgenargument benötigen, empfiehlt es sich, den formalen Parameter im Funktionsprototyp als const Zeiger auf ein (LPCTSTR) anstelle CString anzugeben.Wenn ein formaler Parameter const als Zeiger auf einem Zeichen angegeben wird, können Sie entweder einen Zeiger auf ein Array TCHAR, einer Literalzeichenfolge ["hi there"] oder einem CString-Objekt übergeben.Das CString-Objekt automatisch zu LPCTSTR konvertiert.Jeder Platz, den Sie LPCTSTR, Sie verwenden können, kann ein CString-Objekt auch verwenden.
Sie können einen formalen Parameter auch angeben wie ein konstanter Zeichenfolgenverweis (das heißt, constCString&) wenn das Argument nicht geändert wird.Lassen Sie den const-Modifizierer ab, wenn die Zeichenfolge durch die Funktion geändert wird.Wenn ein Standardwert NULL-Wert gewünscht wird, initialisieren Sie ihn der NULL-Zeichenfolge [""], wie unten dargestellt:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Für die meisten Funktionsergebnisse können Sie ein CString-Objekt einfach als Wert zurückgeben.