CString operací týkajících se stylu c řetězce
Objekt CString objekt obsahuje data řetězec znaků.CString dědí sadu operátory a metody které jsou definovány v šabloně třídy CStringT pro práci s daty řetězec.(CString je typedef které se specializuje CStringT budete chtít pracovat s druhu dat znaku, CString podporuje.)
CString neukládá znak data interně jako řetězec ve stylu jazyka C ukončený hodnotou null.Namísto toho CString sleduje délku znak dat, takže můžete sledovat bezpečněji data a místa vyžaduje.
CString Povolení řetězců stylu jazyka C a poskytuje možnosti pro přístup k datům znak jako řetězec ve stylu jazyka C.Toto téma obsahuje následující oddíly, které popisují, jak používat CString objekty, jako kdyby nebylo stylu jazyka C řetězec ukončený hodnotou null.
Převod na řetězce ukončený hodnotou null stylu jazyka C
Práce s funkcí pro řetězce standardní knihovna run-time
Úpravy obsahu CString přímo
Pomocí CString objekty s proměnnou argument funkce
Zadání CString formální parametry
Pomocí CString jako řetězec ve stylu jazyka C ukončený hodnotou Null
Chcete-li použít CString objekt jako řetězec ve stylu jazyka C, přetypování objekt, který chcete LPCTSTR.V následujícím příkladu CString vrací ukazatel na jen pro čtení C ukončený hodnotou null řetězec ve stylu.strcpy Funkce vloží kopii stylu jazyka C řetězec v proměnné myString.
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aCString);
Můžete použít CString metod, například SetAt, chcete-li upravit jednotlivé znaky v objektu string.Však LPCTSTR ukazatel je dočasný a se stane neplatným při jakékoli změně na CString.CString Může také přejít mimo rozsah a budou automaticky odstraněny.Doporučujeme, abyste měli čerstvě LPCTSTR ukazatel CString objektu pokaždé, když použijete jednu.
V některých případech může vyžadovat kopii CString dat můžete změnit přímo.Použijte funkci více zabezpečené strcpy_s (nebo Unicode/MBCS-přenosný počítač _tcscpy_s) se má kopírovat CString objektu do samostatných vyrovnávací paměti.Toto je, kde znaky lze bezpečně upravit, jak je uvedeno 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-přenosný počítač _tcscpy_s) je buď constwchar_t* (Unicode) nebo constchar* (ANSI).V příkladu výše průchodů CString pro tento argument.Kompilátor C++ automaticky použije definované pro funkci pro převod CString třídu, která převádí CString na LPCTSTR.Umožňuje definovat operace přetypování z jednoho typu na jiný je jedním z nejužitečnějších funkcí jazyka C++.
Práce s funkcí pro standardní Run-Time Library řetězce
Je třeba nemůže najít CString metody k provedení libovolné operace řetězec, pro které může zvážit, jako je například pomocí standardní funkce pro řetězce C run-time library strcmp (nebo Unicode/MBCS-přenosný počítač _tcscmp).
Pokud je nutné použít funkce pro C run-time řetězce, můžete použít technik popsaných v Převod na řetězce C-Style Null-Terminated_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Můžete zkopírovat CString objekt pro vyrovnávací paměť řetězce ekvivalentní stylu jazyka C, provádět vaše operace s vyrovnávací paměti a potom přiřadit výsledný řetězec stylu jazyka C zpět CString objektu.
Úpravy obsahu CString přímo
Ve většině případů byste měli používat CString členů funkcí k změnit obsah CString objektu nebo má být převeden CString na řetězec znaků stylu jazyka C.
Některých situacích, kdy má smysl přímo upravit CString obsahu, například při práci s funkcí operačního systému, které vyžadují znak vyrovnávací paměti.
GetBuffer a ReleaseBuffer metody nabízí přístup k interní znak vyrovnávací paměť CString objektu a umožňují změnit přímo.Následující postup popisuje použití těchto funkcí pro tento účel.
Použít GetBuffer a ReleaseBuffer pro přístup k vyrovnávací paměti interní znak CString objektu
Volání GetBuffer pro CString objektu a zadejte délka vyrovnávací paměti, budete potřebovat.
Použijte ukazatel vrácený GetBuffer pro zápis znaků přímo do CString objektu.
Volání ReleaseBuffer pro CString objekt, který chcete aktualizovat všechny interní CString Stav informace, například délku řetězce.Po úpravě obsah CString objekt přímo, je třeba volat ReleaseBuffer před voláním jakékoli jiné CString funkce členů.
Pomocí CString objekty s proměnnou Argument funkce
Některé funkce jazyka C trvat proměnný počet argumentů.Významné příklad je printf_s.Z důvodu způsobu, kterým je deklarován tento druh funkce kompilátor nemůže být jistý typ argumentů a nemůže určit, kterou operaci převodu má provést na každém argumentu.Proto je důležité, můžete použít explicitní typ přetypování při předávání CString objekt, který má funkci, která přebírá proměnný počet argumentů.
Používat CString objekt v proměnné argument funkce, která explicitně přetypovat CString na LPCTSTR řetězce, 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);
Určení CString formální parametrů
Většina funkcí, které je nutné argument řetězce, je nejlepší určit formálního parametru v prototypu funkce jako const ukazatel na znak (LPCTSTR) místo CString.Když je formální parametr zadán jako const ukazatel na znak, můžete předat ukazatel na TCHAR pole řetězcový literál ["hi there"], nebo CString objektu.CString Objektu budou automaticky převedeny na LPCTSTR.Libovolné místo můžete použít LPCTSTR, můžete také použít CString objektu.
Můžete také zadat formální parametr jako odkaz na konstantní řetězec (to znamená, constCString&) je-li tento argument se nezmění.Myší const Modifikátor Pokud řetězec budou upraveny pomocí funkce.Pokud chcete obnovit výchozí hodnotu null, inicializuje ji řetězec null [""], jak je ukázáno v následujícím příkladu:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Většina funkce výsledků, můžete jednoduše vrátit CString objektu podle hodnoty.