Udostępnij za pośrednictwem


CString operacji odnoszących się do stylu c ciągi

Element CString zawiera dane ciągu znaków.CString dziedziczy zestaw metod i operatorów które zostały zdefiniowane w szablonie klasy CStringT do pracy z danymi ciągu.(CString jest typedef która specjalizuje się CStringT do pracy z typu danych znak który CString obsługuje.)

CString nie przechowuje dane znak wewnętrznie jako ciąg zerem C stylu.Zamiast tego CString śledzi długość danych znaków, aby go bezpieczniejsze obserwować danych i miejsca wymaga.

CString akceptować ciągi C-style i dostępnych metod dostępu do danych znak jako ciąg C-style.Ten temat zawiera następujące sekcje, które wyjaśniają, jak użyć CString obiektów, tak jakby był on ciąg zerem C stylu.

  • Konwersja na ciągi zerem stylu C

  • Praca z funkcji ciągów standardowe biblioteki wykonawczej

  • Modyfikowanie zawartości bezpośrednio CString.

  • Za pomocą obiektów CString zmiennej argument funkcji

  • Określanie parametrów posiadanie CString

Przy użyciu CString jako ciąg zerem stylu C

Aby użyć CString obiektów jako ciąg C-style, obiekt do rzutowania LPCTSTR.W poniższym przykładzie CString zwraca wskaźnik na tylko do odczytu C-style zerem ciąg.strcpy Funkcji umieszcza kopię ciągu C stylu w zmiennej myString.

    CString aCString = "A string";
    char myString[256];
    strcpy(myString, (LPCTSTR)aCString);

Można użyć CString metody, na przykład SetAt, aby zmodyfikować poszczególnych znaków w obiekcie ciąg.Jednak LPCTSTR wskaźnik są tymczasowe i staje się nieprawidłowy, gdy żadnych zmian CString.CString Również przejść poza zakres i automatycznie usunięte.Firma Microsoft zaleca uzyskanie świeżych LPCTSTR wskaźnik CString obiektu za każdym razem, użyj jednej.

Czasami może wymagać kopię CString danych, aby zmodyfikować bezpośrednio.Funkcja więcej zabezpieczonych strcpy_s (lub Unicode/MBCS-komputer przenośny _tcscpy_s) do skopiowania CString obiekt w osobnym buforu.Jest to gdzie znaków można bezpiecznie zmodyfikować, jak pokazano w poniższym przykładzie.

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   

[!UWAGA]

Trzeci argument strcpy_s (lub Unicode/MBCS-komputer przenośny _tcscpy_s) jest constwchar_t* (Unicode) lub constchar* (ANSI).Przykład powyżej przebiegów CString dla tego argumentu.Kompilator C++ automatycznie stosuje zdefiniowanych na potrzeby funkcji konwersji CString Klasa, która konwertuje CString do LPCTSTR.Umożliwia zdefiniowanie operacji rzutowanie typu jest jednym z najbardziej przydatne funkcje języka C++.

Praca z funkcji ciągów standardowe biblioteki wykonawczej

Można znaleźć CString metody do wykonania operacji dowolnego ciągu, dla którego należy rozważyć przy użyciu funkcji standardowych ciąg biblioteki wykonawczej C, takich jak strcmp (lub Unicode/MBCS-komputer przenośny _tcscmp).

Jeśli należy użyć funkcji ciąg w czasie wykonywania C, możesz skorzystać z techniki opisane w konwertowania ciągów C-Style Null-Terminated_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Możesz skopiować CString obiektów do równoważnych buforu ciągu C-style, operacji w buforze, a następnie przypisz wynikowy ciąg C-style z powrotem do CString obiektu.

Modyfikowanie zawartości bezpośrednio CString.

W większości przypadków należy używać CString funkcji elementów członkowskich do zmodyfikowania zawartości CString obiektu lub przekonwertować CString na ciąg znaków C stylu.

Istnieje kilka sytuacji, w których warto bezpośrednio zmodyfikować CString zawartości, na przykład podczas pracy z funkcji systemu operacyjnego, które wymagają w buforze znaków.

GetBuffer i ReleaseBuffer metody oferują dostęp do buforu wewnętrznego znak CString object i umożliwiają bezpośrednio zmodyfikować.Poniższe kroki pokazują, jak używać tych funkcji w tym celu.

Korzystać z GetBuffer i ReleaseBuffer dostępu do buforu wewnętrznego znak obiektu CString

  1. Wywołanie GetBuffer dla CString obiektu i określ długość buforu niezbędnych.

  2. Za pomocą wskaźnika zwrócony przez GetBuffer do zapisania znaków bezpośrednio do CString obiektu.

  3. Wywołanie ReleaseBuffer dla CString aktualizację wszystkich wewnętrznego obiektu CString Stan informacji, na przykład długość ciągu.Po zmodyfikowaniu zawartości CString obiektu bezpośrednio, należy wywołać ReleaseBuffer przed wywołaniem innych CString funkcji elementów członkowskich.

Za pomocą obiektów CString zmiennej Argument funkcji

Niektóre funkcje C pobierać zmienna liczba argumentów.Jest to przykład istotnych printf_s.Ze względu na sposób zadeklarowano tego rodzaju funkcji Kompilator nie może zweryfikować typy argumentów i nie można ustalić operacji konwersji do wykonania dla każdego argumentu.Dlatego istotne jest użycie jawnie określony typ rzutowania podczas przekazywania CString obiektu funkcji pobierającej zmienna liczba argumentów.

Do użycia CString obiektu w zmiennej argumentu funkcji, jawnie oddać CString do LPCTSTR ciąg znaków, jak pokazano w następującym przykładzie.

CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    

Określanie parametrów formalnych CString

Większość funkcji wymagające argument ciągu, najlepiej do określenia posiadanie parametru w funkcji prototyp jako const wskaźnik do znaku (LPCTSTR) zamiast CString.Jeśli parametr posiadanie jest określony jako const wskaźnik do znak, można przekazać wskaźnik do TCHAR tablicy literałem ["hi there"], lub CString obiektu.CString Obiektu zostaną automatycznie przekonwertowane na LPCTSTR.Każde miejsce, można użyć LPCTSTR, można także użyć CString obiektu.

Można również określić parametr posiadanie jako odwołanie stała ciągu (to znaczy, constCString&) Jeśli argument nie zostaną zmodyfikowane.Upuść const Modyfikator, jeśli ciąg zostaną zmodyfikowane przez funkcję.W razie potrzeby domyślnej wartości null jest go zainicjować, jak ciąg null [""], jak pokazano poniżej:

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

Dla większości funkcji wyniki, po prostu może zwrócić CString przy wartości.

Zobacz też

Koncepcje

Argument CString, przekazując

Inne zasoby

Ciągi (ATL/MFC)