Udostępnij za pośrednictwem


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

A CString obiekt zawiera dane ciągu znaków.CStringdziedziczy zbiór metody i Operatorzy , są zdefiniowane w szablonie klasy CStringT do pracy z danymi ciąg.(CString jest typedef się, że CStringT do pracy z rodzaju danych znakowych, CString obsługuje.)

CStringnie przechowuje danych znakowych wewnętrznie jako styl c ciąg zakończony znakiem null.Zamiast tego CString śledzi długość danych znakowych, dzięki czemu można bezpieczniej oglądać, dane i miejsca wymaga.

CStringakceptować ciągi c styl i zapewnia sposoby dostępu danych znakowych jako ciąg c stylu.Ten temat zawiera następujące sekcje, które wyjaśniają jak używać CString obiekt, tak jakby styl c ciąg zakończony znakiem null.

  • Konwertowanie na styl c ciągów zakończona znakiem null

  • Praca z funkcji łańcuchowych standardowe run-time library

  • Modyfikowanie bezpośrednio zawartość CString

  • CString obiektów przy użyciu zmiennej argument funkcji

  • Określanie parametrów formalnych CString

Używając CString jako c styl ciąg zakończony znakiem Null

Aby użyć CString obiektów jako ciąg w stylu języka C, rzutować obiekt na LPCTSTR.W poniższym przykładzie CString zwraca wskaźnik do tylko do odczytu styl c ciąg zakończony zerem.strcpy Funkcja umieszcza kopię c ciągów w zmiennej myString.

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

Można użyć CString metody, na przykład SetAtw celu zmodyfikowania poszczególnych znaków w obiekcie string.Jednakże LPCTSTR wskaźnik jest tymczasowy i staje się nieprawidłowe po każdej zmianie CString.CString Można również przejść z zakresu i automatycznie usuwane.Firma Microsoft zaleca uzyskanie świeżego LPCTSTR wskaźnik CString obiekt zawsze używać jednego.

Czasami może wymagać kopię CString danych bezpośrednio zmodyfikować.Funkcja więcej zabezpieczonych strcpy_s (lub Unicode, MBCS-przenośne _tcscpy_s) do skopiowania CString obiektu do oddzielnych buforu.Jest to, gdzie znaków można bezpiecznie modyfikować, jak pokazano w następującym 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-przenośne _tcscpy_s) jest constwchar_t* (Unicode) lub constchar* (ANSI).Przykład powyżej przebiegów CString dla tego argumentu.Kompilator C++ automatycznie stosuje funkcji konwersji dla CString klasy, która konwertuje CString do LPCTSTR.Możliwość definiowania operacji odlewania z jednego typu do drugiego jest jednym z najbardziej przydatnych funkcji języka C++.

Praca z standardowych funkcji ciąg biblioteki czasu

Powinny być w stanie znaleźć CString wszelkich operacji ciąg, dla których warto rozważyć przy użyciu funkcji ciąg standardowy c run-time library, takie jak metoda strcmp (lub Unicode, MBCS-przenośne _tcscmp).

Jeśli musisz użyć funkcji c ciągu czasu, można użyć technik opisanych w Konwersja do ciągów C-Style Null-Terminated_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Można skopiować CString obiektów do równoważnych buforu ciągów c stylu, operacje na bufor, a następnie przypisz wynikowy ciąg c styl z powrotem do CString obiektu.

Modyfikowanie bezpośrednio zawartość CString

W większości sytuacji należy użyć CString funkcji elementów członkowskich do modyfikowania zawartości CString obiektu lub przekonwertować CString ciąg znaków c stylu.

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

GetBuffer i ReleaseBuffer metody oferują dostęp do buforu wewnętrznego znaków z CString obiektu i można go modyfikować bezpośrednio.Poniższe kroki pokazują jak użycia tych funkcji w tym celu.

Aby użyć bufor wewnętrzny znaków obiektu CString dostępu do GetBuffer i ReleaseBuffer

  1. Wywołanie GetBuffer do CString obiektów i określić długość buforu wymagane.

  2. Użyj wskaźnika zwrócony przez GetBuffer do zapisu znaków bezpośrednio do CString obiektu.

  3. Wywołanie ReleaseBuffer do CString aktualizację wszystkich wewnętrznych obiektu CString Państwo informacje, 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.

CString obiektów przy użyciu zmiennej Argument funkcji

Niektóre funkcje c podjąć zmiennej liczbie argumentów.Przykład ważniejsze jest printf_s.Ze względu na sposób zadeklarowano taką funkcję kompilator nie może być pewien typ argumenty i nie może określić, które operacji konwersji na każdego argumentu.Dlatego jest istotne używanie typem jawnym oddanych przy przekazywaniu CString obiektu do funkcji, która ma zmienną liczbę argumentów.

Aby użyć CString obiekt w funkcji argument zmiennej jawnie oddanych 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

Dla większości funkcji wymagających argument ciąg najlepiej określić parametrów formalnych, prototyp jako const wskaźnik do znaku (LPCTSTR) zamiast CString.Kiedy parametrów formalnych jest określony jako const wskaźnik do znaku można przekazać wskaźnik do TCHARtablicy literałem "hi there", lubCString obiektu.CString Obiektu są automatycznie konwertowane na LPCTSTR.Każde miejsce, można użyć LPCTSTR, można również użyć CString obiektu.

Można również określić parametrów formalnych jako odwołanie stały ciąg (czyli constCString&), jeśli argument nie zostanie zmodyfikowane.Upuść const modyfikator ciąg będzie modyfikowany przez funkcję.W razie potrzeby wartości domyślnej null go zainicjować, aby ciąg null "", jak pokazano poniżej:

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

Dla większości funkcji wyników, można po prostu zwrócenia CString obiektu przez wartość.

Zobacz też

Koncepcje

Argument CString, przekazując

Inne zasoby

Ciągi (ATL/MFC)