CString operací týkajících se stylu c řetězce
A CString objekt obsahuje znak řetězce data.CStringsada dědí metod a operátorů , jsou definovány v šabloně třídy CStringT práce s daty řetězec.( CString je typedef , specializuje CStringT práce s druh dat znaku, CString podporuje.)
CStringneukládá znaková data interně jako řetězec zakončený c styl.Místo toho CString sleduje délku znaková data tak, aby bezpečněji můžete sledovat data a místa, které vyžaduje.
CStringPovolení řetězců c styl a způsoby přístupu znaková data jako řetězec c styl.Toto téma obsahuje následující oddíly, které vysvětlují použití CString objektu, jako kdyby řetězec zakončený c styl.
Převod řetězce zakončené znakem null styl c
Práce s funkcí pro řetězce standardní knihovna run-time
Úprava obsahu CString přímo
Použití objektů CString s proměnnými argumenty funkce
Určení CString formálních parametrů.
Pomocí CString jako řetězec zakončený C-styl
Použít CString objekt jako řetězec c styl, obsadit objekt LPCTSTR .V následujícím příkladu CString vrací ukazatel na čtení c styl zakončený řetězec. strcpy Funkce vloží kopii řetězce c styl v proměnné myString .
CString aCString = "A string";
char myString[256];
strcpy(myString, (LPCTSTR)aString);
Můžete použít CString metod, například SetAt , upravit jednotlivé znaky v objektu string.Však LPCTSTR ukazatel je dočasný a při jakékoli změně stává neplatným CString . CString Můžete také přejít z oboru a automaticky odstraněny.Doporučujeme získat čerstvé LPCTSTR ukazatel CString objektu vždy použít jednu.
Někdy můžete požadovat kopii CString data upravovat přímo.Pomocí funkce více zabezpečené strcpy_s (nebo Unicode, MBCS-přenosné _tcscpy_s ) zkopírujte CString objekt do samostatné vyrovnávací paměti.Toto je kdy znaky lze bezpečně upravit, jak ukazuje následující příklad.
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é _tcscpy_s ) je buď const wchar_t* (Unicode) nebo const char* (ANSI).V příkladu výše průchodů CString pro tento argument.C++ kompilátor automaticky použije funkci pro převod definované pro CString třídy, která převede CString k LPCTSTR .Možnost definovat operace obsazení z jednoho typu na jiný je jednou z nejužitečnějších funkcí jazyka C++.
Práce s standardní funkce pro řetězce knihovny runtime
Je třeba najít CString metoda provést jakoukoli operaci řetězce, které můžete zvážit použití funkcí pro řetězce standard C Runtime library, jako strcmp (nebo Unicode, MBCS-přenosné _tcscmp ).
Pokud je nutné použít funkce pro řetězce C Runtime, pomocí technik popsaných v Převod řetězce C-Style Null-Terminated_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Můžete kopírovat CString objekt odpovídající vyrovnávací paměti řetězec c styl, provádět operace vyrovnávací paměti a potom přiřadit styl c výsledný řetězec zpět CString objektu.
Úprava obsahu CString přímo
Ve většině případů byste měli použít CString funkce členů upravit obsah CString objektu nebo převést CString na řetězec znaků c styl.
Existují určité situace, kdy má smysl přímo upravit CString obsah, například při práci s funkce operačního systému, které vyžadují znak vyrovnávací paměti.
GetBuffer a ReleaseBuffer metod nabízejí přístup do vyrovnávací paměti interní znaku z CString objektu a umožňují upravit přímo.Následující pokyny popisují postup použití těchto funkcí pro tento účel.
Přístup k objektu CString vyrovnávací paměti interní znak pomocí GetBuffer a ReleaseBuffer
Volání GetBuffer pro CString objektu a zadejte délku požadujete vyrovnávací paměti.
Použijte ukazatel vrácený GetBuffer zapisovat přímo do znaků CString objektu.
Volání ReleaseBuffer pro CString objekt aktualizovat všechny vnitřní CString státu informace, například délku řetězce.Po úpravě obsahu CString objektu musí volat přímo, ReleaseBuffer než jakékoli jiné volat CString funkce členů.
Pomocí funkce proměnné Argument CString objektů
Některé funkce c trvat proměnný počet argumentů.Důležitých příklad je printf_s .Díky způsobu, kterým je tento druh funkce deklarovaná kompilátor nemůže být jistý typ argumentů a které operaci převodu na každý argument nelze určit.Je proto nezbytné použít explicitní typ odevzdaných při předávání CString objektu, který převezme proměnný počet argumentů funkce.
Použít CString proměnné argument funkce, explicitně převést objekt CString k 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í parametrů formální CString
Pro většinu funkcí, které potřebují řetězcový argument, je nejlepší určit formálních parametrů v prototyp funkce jako const ukazatel na znak (LPCTSTR) místo CString .Po formální parametr zadán jako const ukazatel na znak můžete předat ukazatel na TCHAR array řetězcový literál "hi there", nebo CString objektu. CString Objektu budou automaticky převedeny na LPCTSTR .Místo můžete použít LPCTSTR , můžete také CString objektu.
Můžete také zadat formální parametr jako odkaz na konstantní řetězec (, const CString& ) Pokud argument nebude změněno.Přetažení const modifikátor Pokud řetězec bude změněna funkce.Potřeby výchozí hodnotu null inicializovat řetězec null "", jak je ukázáno níže:
void AddCustomer(const CString& name, const CString& address,
const CString& comment = _T(""));
Většina výsledků funkce, můžete jednoduše vrátit CString objektu podle hodnoty.