Správa řetězcových dat
Visual C++ nabízí několik způsobů správy řetězcových dat:
Manipulace s řetězci pro práci se stylem
NULL
C -terminated stringsFunkce rozhraní API Win32 pro správu řetězců
CStringT
TŘÍDA MFC, která poskytuje flexibilní objekty řetězce s možností změny velikostiTřída třídy
CStringT
, která poskytuje objekt řetězce nezávislý na knihovně MFC se stejnou funkcí jakoCString
Téměř všechny programy pracují s řetězcovými daty. CString
Třída MFC je často nejlepším řešením pro flexibilní zpracování řetězců. Počínaje verzí 7.0 CString
je možné ji použít v programech nezávislých na prostředí MFC nebo MFC. Knihovna za běhu i CString
řetězce podpory obsahující vícebajtové (široké) znaky, jako je kódování Unicode nebo MBCS.
Tento článek popisuje služby pro obecné účely, které knihovna tříd poskytuje související s manipulací s řetězci. Témata probíraná v tomto článku zahrnují:
CStringT
Třída poskytuje podporu pro manipulaci s řetězci. Účelem je nahradit a rozšířit funkce, které obvykle poskytuje balíček řetězců knihovny runtime jazyka C. Třída CString
poskytuje členské funkce a operátory pro zjednodušené zpracování řetězců, podobně jako v basicu. Třída také poskytuje konstruktory a operátory pro vytváření, přiřazování a porovnávání CString
standardních datových typů řetězců jazyka C++. Vzhledem k tomu CString
, že není odvozen od CObject
, můžete používat CString
objekty nezávisle na většině knihovny tříd Microsoft Foundation (MFC).
CString
objekty se řídí sémantikou hodnot. Objekt CString
představuje jedinečnou hodnotu. CString
Představte si řetězec jako skutečný řetězec, ne jako ukazatel na řetězec.
Objekt CString
představuje sekvenci proměnného počtu znaků. CString
objekty lze považovat za pole znaků.
Unicode a MBCS poskytují přenositelnost
V prostředí MFC verze 3.0 a novější je knihovna MFC, včetně CString
, povolena pro znakové sady Unicode i vícebajtové znakové sady (MBCS). Tato podpora usnadňuje psaní přenosných aplikací, které můžete sestavit pro znaky Unicode nebo ANSI. Chcete-li tuto přenositelnost povolit, každý znak v objektu CString
je typu TCHAR
, který je definován jako wchar_t
v případě, že definujete symbol _UNICODE
při sestavování aplikace, nebo jako char
ne. Znak wchar_t
je široký 16 bitů. Funkce MBCS je povolená, pokud sestavíte pomocí definovaného symbolu _MBCS
. Knihovna MFC je vytvořena buď pomocí symbolu _MBCS
(pro knihovny NAFX), nebo _UNICODE
se symbolem (pro knihovny UAFX) definovaným.
Poznámka:
Příklady CString
v tomto článku a doprovodné články v řetězcích zobrazují literály správně formátované pro přenositelnost Unicode pomocí _T
makra, které přeloží literálový řetězec do formuláře:
L"literal string"
Poznámka:
který kompilátor považuje za řetězec Unicode. Například následující kód:
CString strName = _T("Name");
Poznámka:
je přeložen jako řetězec Unicode, pokud _UNICODE
je definován nebo jako řetězec ANSI, pokud ne. Další informace najdete v článku Podpora znakové sady Unicode a vícebajtové znakové sady (MBCS).
CString
Objekt může obsahovat až INT_MAX
(2 147 483 647) znaků. Datový TCHAR
typ slouží k získání nebo nastavení jednotlivých znaků uvnitř objektu CString
. Na rozdíl od pole CString
znaků má třída integrovanou funkci přidělování paměti. To umožňuje CString
, aby se objekty podle potřeby automaticky zvětšovaly (to znamená, že se nemusíte starat o zvětšení objektu CString
tak, aby odpovídaly delším řetězcům).
CStrings
a const char
ukazatele
Objekt CString
může také fungovat jako literálový řetězec ve stylu jazyka C (což PCXSTR
je stejné jako const char*
v případě, že není v kódu Unicode). Operátor CSimpleStringT::operator PCXSTR
převodu umožňuje CString
volně nahradit objekty ukazateli znaků ve volání funkce. Konstruktor CString(LPCWSTR pszSrc)
umožňuje nahradit CString
objekty ukazateli znaků.
Není proveden žádný pokus o přeložení CString
objektů. Pokud vytvoříte dva CString
objekty obsahující Chicago
, například znaky jsou Chicago
uloženy na dvou místech. (To nemusí být pravdivé pro budoucí verze mfc, takže byste na něm neměli záviset.)
Poznámka:
CSimpleStringT::GetBuffer
CSimpleStringT::ReleaseBuffer
Členské funkce použijte, pokud potřebujete přímý přístup k znaku CString
jako nekonstantní ukazatel na znak.
Poznámka:
CStringT::AllocSysString
Pomocí členských CStringT::SetSysString
funkcí můžete přidělovat a nastavovat BSTR
objekty používané ve službě Automation (dříve označované jako automatizace OLE).
Poznámka:
Pokud je to možné, přidělte CString
objekty na rámečku místo haldy. To šetří paměť a zjednodušuje předávání parametrů.
Třída CString
není implementována jako třída kolekce Knihovny tříd Microsoft Foundation, i když CString
objekty mohou být určitě uloženy jako prvky v kolekcích.
CString
Počítání odkazů
Od mfc verze 4.0 CStringT
při kopírování objektů třídy mfc zvýší počet odkazů místo kopírování dat. Díky tomu je předávání parametrů hodnotou a vrácení CString
objektů podle hodnoty efektivnější. Tyto operace způsobují volání konstruktoru kopírování, někdy více než jednou. Zvýšení počtu odkazů snižuje režijní náklady na tyto běžné operace a zpřístupňuje CString
atraktivní možnost.
Při zničení každé kopie se sníží počet odkazů v původním objektu. Původní CString
objekt není zničen, dokud se počet odkazů nezmenší na nulu.
Můžete použít CString
členské funkce CSimpleStringT::LockBuffer
a CSimpleStringT::UnlockBuffer
zakázat nebo povolit počítání odkazů.