Udostępnij za pośrednictwem


Zarządzanie danymi ciągów

Język Visual C++ oferuje kilka sposobów zarządzania danymi ciągów:

  • Manipulowanie ciągami do pracy z ciągami w stylu NULLC

  • Funkcje interfejsu API Win32 do zarządzania ciągami

  • Klasa MFCCStringT, która zapewnia elastyczne, możliwe do zmiany rozmiaru obiekty ciągów

  • KlasaCStringT, która udostępnia obiekt ciągu niezależnego od MFC z taką samą funkcjonalnością jakCString

Prawie wszystkie programy działają z danymi ciągów. Klasa MFC CString jest często najlepszym rozwiązaniem do elastycznej obsługi ciągów. Począwszy od wersji 7.0, CString można używać w programach niezależnych od MFC lub MFC. Zarówno biblioteka czasu wykonywania, jak i CString ciągi obsługują ciągi zawierające znaki wielobajtowe (szerokie), jak w programowaniu Unicode lub MBCS.

W tym artykule opisano usługi ogólnego przeznaczenia, które biblioteka klas zapewnia związane z manipulowaniem ciągami. Tematy omówione w tym artykule obejmują:

CStringT Klasa Class zapewnia obsługę manipulowania ciągami. Ma on na celu zastąpienie i rozszerzenie funkcjonalności zwykle zapewnianej przez pakiet ciągów biblioteki uruchomieniowej języka C. Klasa CString dostarcza funkcje składowe i operatory do uproszczonej obsługi ciągów, podobnie jak te znalezione w warstwie Podstawowa. Klasa udostępnia również konstruktory i operatory do konstruowania, przypisywania i porównywania CStringtypów danych ciągów języka C++. Ponieważ CString nie pochodzi z CObjectklasy , można używać CString obiektów niezależnie od większości biblioteki klas programu Microsoft Foundation (MFC).

CString obiekty są zgodne z "semantyka wartości". CString Obiekt reprezentuje unikatową wartość. Można traktować CString jako rzeczywisty ciąg, a nie jako wskaźnik do ciągu.

CString Obiekt reprezentuje sekwencję zmiennej liczby znaków. CString obiekty można traktować jako tablice znaków.

Unicode i MBCS zapewniają przenośność

W przypadku MFC w wersji 3.0 lub nowszej MFC, w tym CString, jest włączona zarówno dla zestawów znaków Unicode, jak i wielobajtowych (MBCS). Ta obsługa ułatwia pisanie aplikacji przenośnych, które można tworzyć dla znaków Unicode lub ANSI. Aby włączyć tę przenośność, każdy znak w CString obiekcie ma typ TCHAR, który jest zdefiniowany tak, jakby wchar_t symbol _UNICODE był definiowany podczas kompilowania aplikacji lub tak, jakby char nie. Znak wchar_t ma szerokość 16 bitów. Funkcja MBCS jest włączona w przypadku kompilacji za pomocą zdefiniowanego symbolu _MBCS . Sam MFC jest tworzony za pomocą symbolu _MBCS (dla bibliotek NAFX) lub symbolu _UNICODE (dla bibliotek UAFX) zdefiniowanego.

Uwaga

Przykłady CString w tym i towarzyszących artykułach w ciągach pokazują ciągi literału prawidłowo sformatowane dla przenośności Unicode przy użyciu _T makra, które tłumaczy ciąg literału na formularz:

L"literal string"

Uwaga

który kompilator traktuje jako ciąg Unicode. Na przykład następujący kod:

CString strName = _T("Name");   

Uwaga

jest tłumaczony jako ciąg Unicode, jeśli _UNICODE jest zdefiniowany lub jako ciąg ANSI, jeśli nie. Aby uzyskać więcej informacji, zobacz artykuł Obsługa zestawów znaków Unicode i wielobajtowych (MBCS).

Obiekt CString może przechowywać maksymalnie INT_MAX (2147 483 647 znaków). Typ danych służy do pobierania TCHAR lub ustawiania pojedynczych znaków wewnątrz CString obiektu. W przeciwieństwie do tablic znaków klasa CString ma wbudowaną funkcję alokacji pamięci. CString Dzięki temu obiekty mogą automatycznie rosnąć w razie potrzeby (oznacza to, że nie trzeba martwić się o powiększanie CString obiektu w celu dopasowania dłuższych ciągów).

CStrings i const char wskaźniki

CString Obiekt może również działać jak ciąg w stylu literału C (PCXSTRznak , który jest taki sam, jak const char* w przypadku nie w formacie Unicode). Operator CSimpleStringT::operator PCXSTR konwersji umożliwia CString wolne zastępowanie obiektów wskaźnikami znaków w wywołaniach funkcji. Konstruktor CString(LPCWSTR pszSrc) umożliwia zastępowanie wskaźników znaków dla CString obiektów.

Nie podjęto próby składania CString obiektów. W przypadku tworzenia dwóch CString obiektów zawierających Chicagona przykład znaki w Chicago obiekcie są przechowywane w dwóch miejscach. (Może to nie być prawdą w przyszłych wersjach MFC, więc nie należy od niego zależeć).

Uwaga

Użyj funkcji składowych CSimpleStringT::GetBuffer i CSimpleStringT::ReleaseBuffer , jeśli musisz uzyskać bezpośredni dostęp do CString elementu jako wskaźnika niekonstantego do znaku.

Uwaga

CStringT::AllocSysString Używanie funkcji składowych i CStringT::SetSysString do przydzielania i ustawiania BSTR obiektów używanych w usłudze Automation (wcześniej nazywanej automatyzacją OLE).

Uwaga

Jeśli to możliwe, przydziel CString obiekty na ramce, a nie na stercie. Pozwala to zaoszczędzić pamięć i uprościć przekazywanie parametrów.

Klasa CString nie jest implementowana jako klasa kolekcji biblioteki klas programu Microsoft Foundation, chociaż CString obiekty z pewnością mogą być przechowywane jako elementy w kolekcjach.

CString Zliczanie odwołań

Od MFC w wersji 4.0, gdy CStringT obiekty klasy są kopiowane, MFC zwiększa liczbę odwołań zamiast kopiować dane. Dzięki temu przekazywanie parametrów według wartości i zwracanie CString obiektów według wartości jest bardziej wydajne. Te operacje powodują wywoływanie konstruktora kopiowania, czasami więcej niż raz. Zwiększenie liczby odwołań zmniejsza obciążenie dla tych typowych operacji i sprawia, że użycie CString bardziej atrakcyjnej opcji.

Gdy każda kopia zostanie zniszczona, liczba odwołań w oryginalnym obiekcie zostanie zdekrementowana. Oryginalny CString obiekt nie zostanie zniszczony, dopóki liczba odwołań nie zostanie zmniejszona do zera.

Możesz użyć funkcji CSimpleStringT::LockBuffer składowych CString i CSimpleStringT::UnlockBuffer wyłączyć lub włączyć zliczanie odwołań.

Zobacz też

Tematy ogólne dotyczące MFC