Sdílet prostřednictvím


CString Operace související s řetězci ve stylu jazyka C

Objekt CString obsahuje data řetězce znaků. CStringdědí sadu metod a operátorů definovaných v šabloně CStringT třídy pro práci s řetězcovými daty. (CString je typedef to, která se specializuje CStringT na práci s typem znakových dat, která CString podporují.)

CString neukládá data znaků interně jako řetězec zakončený hodnotou null ve stylu C. Místo toho sleduje délku znakových dat, CString aby bylo možné data bezpečněji sledovat a prostor, který vyžaduje.

CString přijímá řetězce ve stylu jazyka C a poskytuje způsoby přístupu k datům znaků jako řetězce ve stylu jazyka C. Toto téma obsahuje následující části, které vysvětlují, jak použít CString objekt, jako by to byl řetězec typu C-style null-terminated.

Použití CString jako řetězce typu C-Style Null-Terminated

Chcete-li použít CString objekt jako řetězec ve stylu jazyka C, přetypujte objekt na LPCTSTR. V následujícím příkladu CString vrátí ukazatel na řetězec typu C-style null-terminated jen pro čtení. Funkce strcpy vloží kopii řetězce stylu C do proměnné myString.

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

Metody můžete například SetAtpoužít CString k úpravě jednotlivých znaků v řetězcovém objektu. LPCTSTR Ukazatel je však dočasný a stane se neplatným, pokud dojde ke CStringzměně . Rozsah CString může být také mimo rozsah a automaticky se odstraní. Doporučujeme, abyste při každém použití získali nový LPCTSTR ukazatel objektu CString .

Někdy můžete vyžadovat přímou kopii CString dat. K zkopírování CString objektu do samostatné vyrovnávací paměti použijte zabezpečenější funkci strcpy_s (nebo Unicode/MBCS-portable_tcscpy_s). To je místo, kde lze bezpečně upravit znaky, jak je znázorněno v následujícím příkladu.

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   

Poznámka:

Třetí argument ( strcpy_s nebo Unicode/MBCS-portable _tcscpy_s) je buď const wchar_t* (Unicode), nebo const char* (ANSI). Výše uvedený příklad předává CString pro tento argument hodnotu. Kompilátor jazyka C++ automaticky použije funkci převodu definovanou pro CString třídu, která převede na CString LPCTSTR. Schopnost definovat operace přetypování z jednoho typu do druhého je jednou z nejužitečnějších funkcí jazyka C++.

Práce s řetězcovými funkcemi standardní knihovny runtime

Měli byste být schopni najít metodu CString pro provedení jakékoli operace řetězce, pro kterou byste mohli zvážit použití standardních funkcí knihovny runtime jazyka C, jako strcmp jsou (nebo Unicode/MBCS-portable _tcscmp).

Pokud je nutné použít funkce řetězce runtime jazyka C, můžete použít techniky popsané v části Použití CString jako řetězec typu C-style null-terminated. Objekt můžete zkopírovat CString do ekvivalentní vyrovnávací paměti řetězce ve stylu jazyka C, provést operace s vyrovnávací pamětí a potom přiřadit výsledný řetězec stylu C zpět k objektu CString .

Přímé úpravy CString obsahu

Ve většině situací byste měli pomocí CString členských funkcí upravit obsah objektu CString nebo převést na CString řetězec znaků ve stylu jazyka C.

V některých situacích je vhodné obsah přímo upravit CString , například když pracujete s funkcemi operačního systému, které vyžadují vyrovnávací paměť znaků.

Tyto GetBuffer metody ReleaseBuffer nabízejí přístup k interní vyrovnávací paměti znaků objektu CString a umožňují ji upravit přímo. Následující kroky ukazují, jak tyto funkce používat pro tento účel.

GetBuffer Použití a ReleaseBuffer přístup k interní vyrovnávací paměti znaků objektu CString

  1. Volání GetBuffer objektu CString a určení délky požadované vyrovnávací paměti.

  2. Pomocí ukazatele vráceného znakem GetBuffer zapište znaky přímo do objektu CString .

  3. Voláním ReleaseBuffer objektu CString aktualizujte všechny interní CString informace o stavu, například délku řetězce. Po úpravě obsahu objektu CString je nutné volat ReleaseBuffer před voláním jiných členských CString funkcí.

Použití CString objektů s funkcemi argumentu proměnných

Některé funkce jazyka C přebírají proměnný počet argumentů. Je to velmi dobrý příklad: printf_s. Vzhledem ke způsobu, jakým je tento druh funkce deklarován, kompilátor nemůže mít jistotu o typu argumentů a nemůže určit, která operace převodu se má provést pro každý argument. Proto je nezbytné použít explicitní přetypování při předávání CString objektu funkci, která přebírá proměnný počet argumentů.

Pokud chcete použít objekt ve funkci argumentu CString proměnné, explicitně přetypujte CString na LPCTSTR řetězec, jak je znázorněno v následujícím příkladu.

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

Zadání formálních CString parametrů

U většiny funkcí, které potřebují řetězcový argument, je nejlepší zadat formální parametr v prototypu funkce jako const ukazatel na znak () místo znaku CString.LPCTSTR Pokud je formální parametr zadán jako const ukazatel na znak, můžete předat buď ukazatel na TCHAR pole, literálový řetězec ["hi there"], nebo CString objekt. Objekt CString se automaticky převede na objekt LPCTSTR. Jakékoli místo, které můžete použít LPCTSTR, můžete také použít CString objekt.

Formální parametr můžete také zadat jako konstantní odkaz na řetězec (tj. ) v případě, const CString&že argument nebude změněn. const Pokud bude řetězec upraven funkcí, přetáhněte modifikátor. Pokud je požadovaná výchozí hodnota null, inicializujte ji do řetězce null [""], jak je znázorněno níže:

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

U většiny výsledků funkce můžete jednoduše vrátit CString objekt podle hodnoty.

Viz také

Řetězce (ATL/MFC)
CString Předávání argumentů