CSimpleStringT
Třída
Tato třída představuje CSimpleStringT
objekt.
Syntaxe
template <typename BaseType>
class CSimpleStringT
Parametry
BaseType
Typ znaku třídy řetězce. Může to být jedna z následujících možností:
char
(pro řetězce znaků ANSI).wchar_t
(pro řetězce znaků Unicode).TCHAR
(pro řetězce znaků ANSI i Unicode).
Členové
Veřejné definice typedef
Název | Popis |
---|---|
CSimpleStringT::PCXSTR |
Ukazatel na konstantní řetězec. |
CSimpleStringT::PXSTR |
Ukazatel na řetězec. |
Veřejné konstruktory
Název | Popis |
---|---|
CSimpleStringT::CSimpleStringT |
Vytváří objekty CSimpleStringT různými způsoby. |
CSimpleStringT::~CSimpleStringT |
Destruktor. |
Veřejné metody
Název | Popis |
---|---|
CSimpleStringT::Append |
CSimpleStringT Připojí objekt k existujícímu CSimpleStringT objektu. |
CSimpleStringT::AppendChar |
Připojí znak k existujícímu CSimpleStringT objektu. |
CSimpleStringT::CopyChars |
Zkopíruje znak nebo znaky do jiného řetězce. |
CSimpleStringT::CopyCharsOverlapped |
Zkopíruje znak nebo znaky do jiného řetězce, ve kterém se vyrovnávací paměti překrývají. |
CSimpleStringT::Empty |
Vynutí řetězec, aby měl délku nuly. |
CSimpleStringT::FreeExtra |
Uvolní veškerou dodatečnou paměť dříve přidělenou objektem řetězce. |
CSimpleStringT::GetAllocLength |
Načte přidělenou délku objektu CSimpleStringT . |
CSimpleStringT::GetAt |
Vrátí znak na dané pozici. |
CSimpleStringT::GetBuffer |
Vrátí ukazatel na znaky v znaku CSimpleStringT . |
CSimpleStringT::GetBufferSetLength |
Vrátí ukazatel na znaky v CSimpleStringT znaky zkrácené na zadanou délku. |
CSimpleStringT::GetLength |
Vrátí počet znaků v objektu CSimpleStringT . |
CSimpleStringT::GetManager |
Načte správce paměti objektu CSimpleStringT . |
CSimpleStringT::GetString |
Načte řetězec znaků. |
CSimpleStringT::IsEmpty |
Testuje, zda CSimpleStringT objekt neobsahuje žádné znaky. |
CSimpleStringT::LockBuffer |
Zakáže počítání odkazů a chrání řetězec v vyrovnávací paměti. |
CSimpleStringT::Preallocate |
Přidělí určitou velikost paměti pro vyrovnávací paměť znaků. |
CSimpleStringT::ReleaseBuffer |
Uvolní kontrolu vyrovnávací paměti vrácené GetBuffer . |
CSimpleStringT::ReleaseBufferSetLength |
Uvolní kontrolu vyrovnávací paměti vrácené GetBuffer . |
CSimpleStringT::SetAt |
Nastaví znak na dané pozici. |
CSimpleStringT::SetManager |
Nastaví správce paměti objektu CSimpleStringT . |
CSimpleStringT::SetString |
Nastaví řetězec objektu CSimpleStringT . |
CSimpleStringT::StringLength |
Vrátí počet znaků v zadaném řetězci. |
CSimpleStringT::Truncate |
Zkrátí řetězec na zadanou délku. |
CSimpleStringT::UnlockBuffer |
Povolí počítání odkazů a uvolní řetězec v vyrovnávací paměti. |
Veřejné operátory
Název | Popis |
---|---|
CSimpleStringT::operator PCXSTR |
Přímo přistupuje ke znakům uloženým v objektu CSimpleStringT jako řetězec ve stylu jazyka C. |
CSimpleStringT::operator[] |
Vrátí znak na dané pozici – nahrazení operátoru GetAt . |
CSimpleStringT::operator += |
Zřetězí nový řetězec na konec existujícího řetězce. |
CSimpleStringT::operator = |
Přiřadí objektu novou hodnotu CSimpleStringT . |
Poznámky
CSimpleStringT
je základní třída pro různé třídy řetězců podporované jazykem Visual C++. Poskytuje minimální podporu pro správu paměti objektu řetězce a základní manipulaci s vyrovnávací pamětí. Pokročilejší řetězcové objekty naleznete v tématu CStringT Class
.
Požadavky
Záhlaví: atlsimpstr.h
CSimpleStringT::Append
CSimpleStringT
Připojí objekt k existujícímu CSimpleStringT
objektu.
Syntaxe
void Append(const CSimpleStringT& strSrc);
void Append(PCXSTR pszSrc, int nLength);
void Append(PCXSTR pszSrc);
Parametry
strSrc
Objekt CSimpleStringT
, který se má připojit.
pszSrc
Ukazatel na řetězec obsahující znaky, které se mají připojit.
nLength
Počet znaků, které se mají připojit.
Poznámky
Voláním této metody připojíte existující CSimpleStringT
objekt k jinému CSimpleStringT
objektu.
Příklad
Následující příklad ukazuje použití CSimpleStringT::Append
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str1(pMgr), str2(pMgr);
str1.SetString(_T("Soccer is"));
str2.SetString(_T(" an elegant game"));
str1.Append(str2);
ASSERT(_tcscmp(str1, _T("Soccer is an elegant game")) == 0);
CSimpleStringT::AppendChar
Připojí znak k existujícímu CSimpleStringT
objektu.
Syntaxe
void AppendChar(XCHAR ch);
Parametry
ch
Znak, který se má připojit
Poznámky
Voláním této funkce připojíte zadaný znak na konec existujícího CSimpleStringT
objektu.
CSimpleStringT::CopyChars
Zkopíruje znak nebo znaky do objektu CSimpleStringT
.
Syntaxe
static void CopyChars(
XCHAR* pchDest,
const XCHAR* pchSrc,
int nChars) throw();
static void CopyChars(
XCHAR* pchDest,
size_t nDestLen,
const XCHAR* pchSrc,
int nChars) throw();
Parametry
pchDest
Ukazatel na řetězec znaků.
nDestLen
Velikost vyrovnávací paměti pchDest
pchSrc
Ukazatel na řetězec obsahující znaky, které se mají zkopírovat.
nChars
Počet pchSrc
znaků, které se mají zkopírovat.
Poznámky
Voláním této metody zkopírujte znaky z pchSrc
pchDest
řetězce.
Příklad
Následující příklad ukazuje použití CSimpleStringT::CopyChars
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(_T("xxxxxxxxxxxxxxxxxxx"), 20, pMgr);
const TCHAR* pszSrc = _T("Hello world!");
_tprintf_s(_T("%s\n"), str);
str.CopyChars(str.GetBuffer(), 20, pszSrc, 12);
_tprintf_s(_T("%s\n"), str);
Výstup z tohoto příkladu je následující:
xxxxxxxxxxxxxxxxxxx
Hello world!xxxxxxx
CSimpleStringT::CopyCharsOverlapped
Zkopíruje znak nebo znaky do objektu CSimpleStringT
.
Syntaxe
static void CopyCharsOverlapped(
XCHAR* pchDest,
const XCHAR* pchSrc,
int nChars) throw();
Parametry
pchDest
Ukazatel na řetězec znaků.
pchSrc
Ukazatel na řetězec obsahující znaky, které se mají zkopírovat.
nChars
Počet pchSrc
znaků, které se mají zkopírovat.
Poznámky
Voláním této metody zkopírujte znaky z pchSrc
pchDest
řetězce. Na rozdíl od CopyChars
, CopyCharsOverlapped
poskytuje bezpečnou metodu pro kopírování z vyrovnávací paměti znaků, které se mohou překrývat.
Příklad
Podívejte se na příklad nebo CSimpleStringT::CopyChars
zdrojový kód pro CSimpleStringT::SetString
(umístěný v atlsimpstr.h
).
CSimpleStringT::CSimpleStringT
CSimpleStringT
Vytvoří objekt.
Syntaxe
CSimpleStringT(const XCHAR* pchSrc, int nLength, IAtlStringMgr* pStringMgr);
CSimpleStringT(PCXSTR pszSrc, IAtlStringMgr* pStringMgr);
CSimpleStringT(const CSimpleStringT& strSrc);
explicit CSimpleStringT(IAtlStringMgr* pStringMgr) throw();
Parametry
strSrc
Existující CSimpleStringT
objekt, který se má do tohoto CSimpleStringT
objektu zkopírovat.
pchSrc
Ukazatel na pole znaků délky nLength
, není ukončena null.
pszSrc
Řetězec ukončený hodnotou null, který se má zkopírovat do tohoto CSimpleStringT
objektu.
nLength
Početznakůchch pch
pStringMgr
Ukazatel na správce paměti objektu CSimpleStringT
. Další informace o správě paměti naleznete IAtlStringMgr
CSimpleStringT
v tématu Správa paměti a CStringT
.
Poznámky
Vytvořte nový CSimpleStringT
objekt. Vzhledem k tomu, že konstruktory kopírují vstupní data do nového přiděleného úložiště, můžou mít za následek výjimky paměti.
Příklad
Následující příklad ukazuje použití CSimpleStringT::CSimpleStringT
pomocí ATL typedef
CSimpleString
. CSimpleString
je běžně používaná specializace šablony CSimpleStringT
třídy .
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString s1(pMgr);
// Empty string
CSimpleString s2(_T("cat"), pMgr);
// From a C string literal
CSimpleString s3(s2);
// Copy constructor
CSimpleString s4(s2 + _T(" ") + s3);
// From a string expression
CSimpleString s5(_T("xxxxxx"), 6, pMgr);
// s5 = "xxxxxx"
CSimpleStringT::Empty
Vytvoří tento CSimpleStringT
objekt prázdný řetězec a podle potřeby uvolní paměť.
Syntaxe
void Empty() throw();
Poznámky
Další informace naleznete v tématu Řetězce: CString
Vyčištění výjimky.
Příklad
Následující příklad ukazuje použití CSimpleStringT::Empty
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString s(pMgr);
ASSERT(s.IsEmpty());
CSimpleStringT::FreeExtra
Uvolní veškerou dodatečnou paměť, kterou dříve přidělil řetězec, ale už ji nepotřebujete.
Syntaxe
void FreeExtra();
Poznámky
Tím by se měly snížit režijní náklady na paměť spotřebované objektem řetězce. Metoda relokuje vyrovnávací paměť na přesnou délku vrácenou GetLength
.
Příklad
CAtlString basestr;
IAtlStringMgr* pMgr;
pMgr= basestr.GetManager();
ASSERT(pMgr != NULL);
// Create a CSimpleString with 28 characters
CSimpleString str(_T("Many sports are fun to play."), 28, pMgr);
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
str.GetAllocLength(), str.GetLength());
// Assigning a smaller string won't cause CSimpleString to free its
// memory, because it assumes the string will grow again anyway.
str = _T("Soccer is best!");
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
str.GetAllocLength(), str.GetLength());
// This call forces CSimpleString to release the extra
// memory it doesn't need.
str.FreeExtra();
_tprintf_s(_T("Alloc length is %d, String length is %d\n"),
str.GetAllocLength(), str.GetLength());
Výstup z tohoto příkladu je následující:
Alloc length is 1031, String length is 1024
Alloc length is 1031, String length is 15
Alloc length is 15, String length is 15
CSimpleStringT::GetAllocLength
Načte přidělenou délku objektu CSimpleStringT
.
Syntaxe
int GetAllocLength() const throw();
Návratová hodnota
Počet znaků přidělených pro tento objekt.
Poznámky
Voláním této metody určíte počet znaků přidělených pro tento CSimpleStringT
objekt. Podívejte se FreeExtra
na příklad volání této funkce.
CSimpleStringT::GetAt
Vrátí jeden znak z objektu CSimpleStringT
.
Syntaxe
XCHAR GetAt(int iChar) const;
Parametry
iChar
Index znaku v objektu CSimpleStringT
založený na nule. Parametr iChar
musí být větší nebo roven 0 a menší než hodnota vrácená GetLength
hodnotou . GetAt
V opačném případě vygeneruje výjimku.
Návratová hodnota
Znak XCHAR
, který obsahuje znak na zadané pozici v řetězci.
Poznámky
Voláním této metody vrátíte jeden znak určený iChar
. Přetížený operátor dolního indexu ([]
) je pohodlný alias pro GetAt
. Ukončovací znak null je adresovatelný bez vygenerování výjimky pomocí GetAt
. Není však počítáno GetLength
hodnotou a vrácená hodnota je 0.
Příklad
Následující příklad ukazuje, jak použít CSimpleStringT::GetAt
.
CSimpleString s(_T("abcdef"), pMgr);
ASSERT(s.GetAt(2) == _T('c'));
CSimpleStringT::GetBuffer
Vrátí ukazatel na interní vyrovnávací paměť znaků objektu CSimpleStringT
.
Syntaxe
PXSTR GetBuffer(int nMinBufferLength);
PXSTR GetBuffer();
Parametry
nMinBufferLength
Minimální početznakůch Tato hodnota neobsahuje mezeru pro ukončovací znak null.
Pokud nMinBufferLength
je větší než délka aktuální vyrovnávací paměti, GetBuffer
zničí aktuální vyrovnávací paměť, nahradí ji vyrovnávací pamětí požadované velikosti a resetuje počet odkazů na objekt na nulu. Pokud jste dříve volali LockBuffer
tuto vyrovnávací paměť, ztratíte zámek vyrovnávací paměti.
Návratová hodnota
PXSTR
Ukazatel na vyrovnávací paměť znaku objektu (ukončený hodnotou null).
Poznámky
Voláním této metody vrátí obsah vyrovnávací paměti objektu CSimpleStringT
. Vrácená PXSTR
hodnota není konstanta, a proto umožňuje přímou úpravu CSimpleStringT
obsahu.
Pokud použijete ukazatel vrácený GetBuffer
ke změně obsahu řetězce, musíte volat ReleaseBuffer
aktualizaci interního CSimpleStringT
stavu dříve, než použijete jiné CSimpleStringT
metody.
Adresa vrácená GetBuffer
voláním ReleaseBuffer
nemusí být platná, protože další CSimpleStringT
operace mohou způsobit CSimpleStringT
, že vyrovnávací paměť bude relokována. Vyrovnávací paměť není relokována, pokud nezměníte délku CSimpleStringT
.
Paměť vyrovnávací paměti se automaticky uvolní při zničení objektu CSimpleStringT
.
Pokud budete mít přehled o délce řetězce sami, neměli byste přidávat ukončující znak null. Je však nutné zadat konečnou délku řetězce při uvolnění vyrovnávací paměti s ReleaseBuffer
. Pokud připojíte ukončující znak null, měli byste pro délku předat hodnotu -1 (výchozí). ReleaseBuffer
pak určuje délku vyrovnávací paměti.
Pokud není dostatek paměti pro splnění GetBuffer
požadavku, tato metoda vyvolá CMemoryException*
chybu .
Příklad
CSimpleString s(_T("abcd"), pMgr);
LPTSTR pBuffer = s.GetBuffer(10);
int sizeOfBuffer = s.GetAllocLength();
// Directly access CSimpleString buffer
_tcscpy_s(pBuffer, sizeOfBuffer, _T("Hello"));
ASSERT(_tcscmp(s, _T("Hello")) == 0);
s.ReleaseBuffer();
CSimpleStringT::GetBufferSetLength
Vrátí ukazatel na vnitřní vyrovnávací paměť znaků objektu CSimpleStringT
, zkrácení nebo zvětšení jeho délky v případě potřeby přesně odpovídat délce zadané v nLength
.
Syntaxe
PXSTR GetBufferSetLength(int nLength);
Parametry
nLength
Přesná velikost CSimpleStringT
vyrovnávací paměti znaků ve znaznach.
Návratová hodnota
PXSTR
Ukazatel na vyrovnávací paměť znaku objektu (ukončený hodnotou null).
Poznámky
Voláním této metody načtěte zadanou délku vnitřní vyrovnávací paměti objektu CSimpleStringT
. Vrácený PXSTR
ukazatel není const
a umožňuje tak přímou úpravu CSimpleStringT
obsahu.
Pokud použijete ukazatel vrácený GetBufferSetLength
ke změně obsahu řetězce, volání ReleaseBuffer
aktualizace interního CSimpleStringT
stavu před použitím jiných CSimpleStringT
metod.
Adresa vrácená GetBufferSetLength
voláním ReleaseBuffer
nemusí být platná, protože další CSimpleStringT
operace mohou způsobit CSimpleStringT
, že vyrovnávací paměť bude relokována. Vyrovnávací paměť není znovu přiřazena, pokud nezměníte délku CSimpleStringT
.
Paměť vyrovnávací paměti se automaticky uvolní při zničení objektu CSimpleStringT
.
Pokud budete mít přehled o délce řetězce sami, nepřidávejte ukončující znak null. Při uvolnění vyrovnávací paměti pomocí ReleaseBuffer
je nutné zadat konečnou délku řetězce . Pokud při volání ReleaseBuffer
připojíte ukončující znak null , předejte hodnotu -1 (výchozí) pro délku ReleaseBuffer
a ReleaseBuffer
provedete strlen
s vyrovnávací pamětí hodnotu, která určí jeho délku.
Další informace o počítání odkazů najdete v následujících článcích:
- Správa životností objektů prostřednictvím počítání odkazů v sadě Windows SDK
- Implementace počítání odkazů v sadě Windows SDK
- Pravidla pro správu počtu odkazů v sadě Windows SDK
Příklad
Následující příklad ukazuje použití CSimpleStringT::GetBufferSetLength
.
CSimpleString str(pMgr);
LPTSTR pstr = str.GetBufferSetLength(3);
pstr[0] = _T('C');
pstr[1] = _T('u');
pstr[2] = _T('p');
str.ReleaseBuffer();
str += _T(" soccer is best!");
ASSERT(_tcscmp(str, _T("Cup soccer is best!")) == 0);
CSimpleStringT::GetLength
Vrátí počet znaků v objektu CSimpleStringT
.
Syntaxe
int GetLength() const throw();
Návratová hodnota
Počet znaků v řetězci.
Poznámky
Voláním této metody vrátíte počet znaků v objektu. Počet neobsahuje ukončovací znak null.
U vícebajtových znakových sad (MBCS) GetLength
se počítá každý 8bitový znak. To znamená, že hlavní a koncový bajt v jednom vícebajtovém znaku se počítají jako dva bajty. Podívejte se FreeExtra
na příklad volání této funkce.
CSimpleStringT::GetManager
Načte správce paměti objektu CSimpleStringT
.
Syntaxe
IAtlStringMgr* GetManager() const throw();
Návratová hodnota
Ukazatel na správce paměti pro CSimpleStringT
objekt.
Poznámky
Voláním této metody načtěte správce paměti používaný objektem CSimpleStringT
. Další informace o správcích paměti a řetězcových objektech naleznete v tématu Správa paměti a CStringT
.
CSimpleStringT::GetString
Načte řetězec znaků.
Syntaxe
PCXSTR GetString() const throw();
Návratová hodnota
Ukazatel na řetězec znaků ukončený hodnotou null.
Poznámky
Voláním této metody načtěte řetězec znaků přidružený k objektu CSimpleStringT
.
Poznámka:
Vrácený PCXSTR
ukazatel je const
a neumožňuje přímé úpravy CSimpleStringT
obsahu.
Příklad
Následující příklad ukazuje použití CSimpleStringT::GetString
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(pMgr);
str += _T("Cup soccer is best!");
_tprintf_s(_T("%s"), str.GetString());
Výstup z tohoto příkladu je následující:
Cup soccer is best!
CSimpleStringT::IsEmpty
Otestuje CSimpleStringT
objekt pro prázdnou podmínku.
Syntaxe
bool IsEmpty() const throw();
Návratová hodnota
Vrátí TRUE
, pokud má objekt délku CSimpleStringT
0; jinak FALSE
.
Poznámky
Voláním této metody určíte, zda objekt obsahuje prázdný řetězec.
Příklad
Následující příklad ukazuje použití CSimpleStringT::IsEmpty
.
CSimpleString s(pMgr);
ASSERT(s.IsEmpty());
CSimpleStringT::LockBuffer
Zakáže počítání odkazů a chrání řetězec v vyrovnávací paměti.
Syntaxe
PXSTR LockBuffer();
Návratová hodnota
Ukazatel na CSimpleStringT
objekt nebo řetězec ukončený hodnotou null.
Poznámky
Voláním této metody zamknete vyrovnávací paměť objektu CSimpleStringT
. Zavoláním LockBuffer
vytvoříte kopii řetězce s číslem -1 pro počet odkazů. Pokud je hodnota počtu odkazů -1, řetězec v vyrovnávací paměti se považuje za "uzamčený". V uzamčeném stavu je řetězec chráněn dvěma způsoby:
Žádný jiný řetězec nemůže získat odkaz na data v zamknutém řetězci, i když je tento řetězec přiřazen k zamknutému řetězci.
Uzamčený řetězec nikdy neodkazuje na jiný řetězec, i když se tento druhý řetězec zkopíruje do uzamčeného řetězce.
Uzamčením řetězce v vyrovnávací paměti zajistíte, že výhradní blokování řetězce v vyrovnávací paměti zůstane nedotčené.
Po dokončení LockBuffer
volání UnlockBuffer
pro resetování počtu odkazů na 1.
Poznámka:
Pokud voláte GetBuffer
uzamčenou vyrovnávací paměť a nastavíte GetBuffer
parametr nMinBufferLength
na větší než délka aktuální vyrovnávací paměti, ztratíte zámek vyrovnávací paměti. Takové volání GetBuffer
zničí aktuální vyrovnávací paměť, nahradí ji vyrovnávací pamětí požadované velikosti a resetuje počet odkazů na nulu.
Další informace o počítání odkazů najdete v následujících článcích:
Správa životností objektů prostřednictvím počítání odkazů v sadě Windows SDK
Implementace počítání odkazů v sadě Windows SDK
Pravidla pro správu počtu odkazů v sadě Windows SDK
Příklad
Následující příklad ukazuje použití CSimpleStringT::LockBuffer
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(_T("Hello"), pMgr);
TCHAR ch;
str.LockBuffer();
ch = str.GetAt(2);
_tprintf_s(_T("%c"), ch);
str.UnlockBuffer();
Výstup z tohoto příkladu je následující:
l
CSimpleStringT::operator[]
Volání této funkce pro přístup k jednomu znaku pole znaků.
Syntaxe
XCHAR operator[](int iChar) const;
Parametry
iChar
Index znaku v řetězci založený na nule.
Poznámky
Operátor přetížené dolní index ([]
) vrátí jeden znak určený indexem založeným na nule v iChar
. Tento operátor je praktickou náhradou GetAt
členské funkce.
Poznámka:
Pomocí operátoru dolního indexu[]
() můžete získat hodnotu znaku v objektu CSimpleStringT
, ale nemůžete jej použít ke změně hodnoty znaku v objektu CSimpleStringT
.
Příklad
Následující příklad ukazuje použití CSimpleStringT::operator []
.
CSimpleString s(_T("abc"), pMgr);
ASSERT(s[1] == _T('b'));
CSimpleStringT::operator []
Volání této funkce pro přístup k jednomu znaku pole znaků.
Syntaxe
XCHAR operator[](int iChar) const;
Parametry
iChar
Index znaku v řetězci založený na nule.
Poznámky
Operátor přetížené dolní index ([]
) vrátí jeden znak určený indexem založeným na nule v iChar
. Tento operátor je praktickou náhradou GetAt
členské funkce.
Poznámka:
Pomocí operátoru dolního indexu[]
() můžete získat hodnotu znaku v objektu CSimpleStringT
, ale nemůžete jej použít ke změně hodnoty znaku v objektu CSimpleStringT
.
CSimpleStringT::operator +=
Spojí nový řetězec nebo znak na konec existujícího řetězce.
Syntaxe
CSimpleStringT& operator +=(PCXSTR pszSrc);
CSimpleStringT& operator +=(const CSimpleStringT& strSrc);
template<int t_nSize>
CSimpleStringT& operator+=(const CStaticString< XCHAR, t_nSize >& strSrc);
CSimpleStringT& operator +=(char ch);
CSimpleStringT& operator +=(unsigned char ch);
CSimpleStringT& operator +=(wchar_t ch);
Parametry
pszSrc
Ukazatel na řetězec ukončený hodnotou null.
strSrc
Ukazatel na existující CSimpleStringT
objekt.
ch
Znak, který se má připojit.
Poznámky
Operátor přijímá jiný CSimpleStringT
objekt nebo znak. Upozorňujeme, že výjimky paměti mohou nastat při každém použití tohoto operátoru zřetězení, protože nové úložiště může být přiděleno pro znaky přidané do tohoto CSimpleStringT
objektu.
Příklad
Následující příklad ukazuje použití CSimpleStringT::operator +=
.
CSimpleString str(_T("abc"), pMgr);
ASSERT(_tcscmp((str += _T("def")), _T("abcdef")) == 0);
CSimpleStringT::operator =
Přiřadí objektu novou hodnotu CSimpleStringT
.
Syntaxe
CSimpleStringT& operator =(PCXSTR pszSrc);
CSimpleStringT& operator =(const CSimpleStringT& strSrc);
Parametry
pszSrc
Ukazatel na řetězec ukončený hodnotou null.
strSrc
Ukazatel na existující CSimpleStringT
objekt.
Poznámky
Pokud je cílový řetězec (levá strana) už dostatečně velký k uložení nových dat, neprovádí se přidělení nové paměti. Všimněte si, že výjimky paměti mohou nastat vždy, když použijete operátor přiřazení, protože nové úložiště je často přiděleno k uložení výsledného CSimpleStringT
objektu.
Příklad
Následující příklad ukazuje použití CSimpleStringT::operator =
.
CSimpleString s1(pMgr), s2(pMgr);
// Empty CSimpleStringT objects
s1 = _T("cat");
// s1 = "cat"
ASSERT(_tcscmp(s1, _T("cat")) == 0);
s2 = s1; // s1 and s2 each = "cat"
ASSERT(_tcscmp(s2, _T("cat")) == 0);
s1 = _T("the ") + s1;
// Or expressions
ASSERT(_tcscmp(s1, _T("the cat")) == 0);
s1 = _T("x");
// Or just individual characters
ASSERT(_tcscmp(s1, _T("x")) == 0);
CSimpleStringT::operator PCXSTR
Přímo přistupuje ke znakům uloženým v objektu CSimpleStringT
jako řetězec ve stylu jazyka C.
Syntaxe
operator PCXSTR() const throw();
Návratová hodnota
Ukazatel znaku na data řetězce.
Poznámky
Nejsou zkopírovány žádné znaky; je vrácen pouze ukazatel. U tohoto operátoru buďte opatrní. Pokud po získání znakového CString
ukazatele změníte objekt, může dojít k reálné poloze paměti, která ukazatel zneplatní.
Příklad
Následující příklad ukazuje použití CSimpleStringT::operator PCXSTR
.
// If the prototype of a function is known to the compiler,
// the PCXSTR cast operator may be invoked implicitly.
CSimpleString strSports(L"Soccer is Best!", pMgr);
WCHAR sz[1024];
wcscpy_s(sz, strSports);
// If the prototype isn't known or is a va_arg prototype,
// you must invoke the cast operator explicitly. For example,
// the va_arg part of a call to swprintf_s() needs the cast:
swprintf_s(sz, 1024, L"I think that %s!\n", (PCWSTR)strSports);
// While the format parameter is known to be an PCXSTR and
// therefore doesn't need the cast:
swprintf_s(sz, 1024, strSports);
// Note that some situations are ambiguous. This line will
// put the address of the strSports object to stdout:
wcout << strSports;
// while this line will put the content of the string out:
wcout << (PCWSTR)strSports;
CSimpleStringT::PCXSTR
Ukazatel na konstantní řetězec.
Syntaxe
typedef ChTraitsBase< BaseType >::PCXSTR PCXSTR;
CSimpleStringT::Preallocate
Přidělí určité množství bajtů objektu CSimpleStringT
.
Syntaxe
void Preallocate( int nLength);
Parametry
nLength
Přesná velikost CSimpleStringT
vyrovnávací paměti znaků ve znaznach.
Poznámky
Voláním této metody přidělte konkrétní velikost vyrovnávací paměti pro CSimpleStringT
objekt.
CSimpleStringT
vygeneruje STATUS_NO_MEMORY
výjimku, pokud není možné přidělit místo pro vyrovnávací paměť znaků. Ve výchozím nastavení přidělení paměti provádí funkce HeapAlloc
rozhraní API WIN32 nebo HeapReAlloc
.
Příklad
Následující příklad ukazuje použití CSimpleStringT::Preallocate
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(pMgr);
_tprintf_s(_T("Allocated length: %d\n"), str.GetAllocLength());
str.Preallocate(100);
_tprintf_s(_T("Allocated length: %d\n"), str.GetAllocLength());
Výstup z tohoto příkladu je následující:
Allocated length: 0
Allocated length: 103
CSimpleStringT::PXSTR
Ukazatel na řetězec.
Syntaxe
typedef ChTraitsBase< BaseType >::PXSTR PXSTR;
CSimpleStringT::ReleaseBuffer
Uvolní kontrolu vyrovnávací paměti přidělené GetBuffer
.
Syntaxe
void ReleaseBuffer(int nNewLength = -1);
Parametry
nNewLength
Nová délka řetězce v značce, nepočítá se ukončovací znak null. Pokud je řetězec ukončen null, výchozí hodnota -1 nastaví CSimpleStringT
velikost na aktuální délku řetězce.
Poznámky
Voláním této metody lze relokovat nebo uvolnit vyrovnávací paměť řetězcového objektu. Pokud víte, že řetězec v vyrovnávací paměti je ukončen null, můžete vynechat nNewLength
argument. Pokud váš řetězec není ukončený hodnotou null, použijte nNewLength
k určení jeho délky. Adresa vrácená voláním ReleaseBuffer
nebo jinou GetBuffer
CSimpleStringT
operací je neplatná.
Příklad
Následující příklad ukazuje použití CSimpleStringT::ReleaseBuffer
.
const int bufferSize = 1024;
CSimpleString s(_T("abc"), pMgr);
LPTSTR p = s.GetBuffer(bufferSize);
_tcscpy_s(p, bufferSize, _T("abc"));
// use the buffer directly
ASSERT(s.GetLength() == 3);
// String length = 3
s.ReleaseBuffer();
// Surplus memory released, p is now invalid.
ASSERT(s.GetLength() == 3);
// Length still 3
CSimpleStringT::ReleaseBufferSetLength
Uvolní kontrolu vyrovnávací paměti přidělené GetBuffer
.
Syntaxe
void ReleaseBufferSetLength(int nNewLength);
Parametry
nNewLength
Délka uvolněného řetězce
Poznámky
Tato funkce je funkčně podobná ReleaseBuffer
s tím rozdílem, že musí být předána platná délka objektu string.
CSimpleStringT::SetAt
Nastaví jeden znak z objektu CSimpleStringT
.
Syntaxe
void SetAt(int iChar, XCHAR ch);
Parametry
iChar
Index znaku v objektu CSimpleStringT
založený na nule. Parametr iChar
musí být větší nebo roven 0 a menší než hodnota vrácená GetLength
hodnotou .
ch
Nový znak.
Poznámky
Voláním této metody přepíšete znak umístěný v iChar
. Tato metoda nezvětší řetězec, pokud iChar
překročí hranice existujícího řetězce.
Příklad
Následující příklad ukazuje použití CSimpleStringT::SetAt
.
CSimpleString s(_T("abcdef"), pMgr);
s.SetAt(1, _T('a'));
ASSERT(_tcscmp(s, _T("aacdef")) == 0);
CSimpleStringT::SetManager
Určuje správce paměti objektu CSimpleStringT
.
Syntaxe
void SetManager(IAtlStringMgr* pStringMgr);
Parametry
pStringMgr
Ukazatel na nového správce paměti.
Poznámky
Voláním této metody určíte nového správce paměti, který objekt CSimpleStringT
používá. Další informace o správcích paměti a řetězcových objektech naleznete v tématu Správa paměti a CStringT
.
Příklad
Následující příklad ukazuje použití CSimpleStringT::SetManager
.
CSimpleString s(pMgr);
s.SetManager(pCustomMgr);
CSimpleStringT::SetString
Nastaví řetězec objektu CSimpleStringT
.
Syntaxe
void SetString(PCXSTR pszSrc, int nLength);
void SetString(PCXSTR pszSrc);
Parametry
pszSrc
Ukazatel na řetězec ukončený hodnotou null.
nLength
Početznakůchch pszSrc
Poznámky
Zkopírujte do objektu CSimpleStringT
řetězec. SetString
přepíše starší řetězcová data ve vyrovnávací paměti.
Obě verze kontrolují SetString
, jestli pszSrc
je ukazatel null, a pokud ano, vyvolá E_INVALIDARG
chybu.
Verze s jedním parametrem SetString
pszSrc
očekává, že odkazuje na řetězec ukončený hodnotou null.
Verze dvou parametrů SetString
také očekává pszSrc
, že bude řetězec ukončený hodnotou null. Používá nLength
se jako délka řetězce, pokud se nejprve nenarazí na ukončovací znak null.
Verze dvou parametrů SetString
také kontroluje, zda pszSrc
odkazuje na umístění v aktuální vyrovnávací paměti v CSimpleStringT
. V tomto speciálním případě používá funkci kopírování paměti, SetString
která nepřepíše řetězcová data při kopírování řetězcových dat zpět do vyrovnávací paměti.
Příklad
Následující příklad ukazuje použití CSimpleStringT::SetString
.
CSimpleString s(_T("abcdef"), pMgr);
ASSERT(_tcscmp(s, _T("abcdef")) == 0);
s.SetString(_T("Soccer"), 6);
ASSERT(_tcscmp(s, _T("Soccer")) == 0);
CSimpleStringT::StringLength
Vrátí počet znaků v zadaném řetězci.
Syntaxe
ATL_NOINLINE static int StringLength(PCXSTR psz) throw();
Parametry
psz
Ukazatel na řetězec ukončený hodnotou null.
Návratová hodnota
Početznakůch psz
Poznámky
Voláním této metody načtěte počet znaků v řetězci, na který psz
odkazuje .
Příklad
Následující příklad ukazuje použití CSimpleStringT::StringLength
.
ASSERT(CSimpleString::StringLength(_T("soccer")) == 6);
CSimpleStringT::Truncate
Zkrátí řetězec na novou délku.
Syntaxe
void Truncate(int nNewLength);
Parametry
nNewLength
Nová délka řetězce.
Poznámky
Voláním této metody zkrátíte obsah řetězce na novou délku.
Poznámka:
To nemá vliv na přidělenou délku vyrovnávací paměti. Chcete-li snížit nebo zvýšit aktuální vyrovnávací paměť, viz FreeExtra
a Preallocate
.
Příklad
Následující příklad ukazuje použití CSimpleStringT::Truncate
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(_T("abcdefghi"), pMgr);
_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength());
_tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str);
str.Truncate(4);
_tprintf_s(_T("String length: %d / Allocated length: %d\n"), str.GetLength(), str.GetAllocLength());
_tprintf_s(_T("Contents: %s\n"), (LPCTSTR)str);
Výstup z tohoto příkladu je:
String length: 9 / Allocated length: 15
Contents: abcdefghi
String length: 4 / Allocated length: 15
Contents: abcd
CSimpleStringT::UnlockBuffer
Odemkne vyrovnávací paměť objektu CSimpleStringT
.
Syntaxe
void UnlockBuffer() throw();
Poznámky
Voláním této metody resetujte počet odkazů řetězce na hodnotu 1.
Destruktor CSimpleStringT
automaticky volá UnlockBuffer
, aby se zajistilo, že vyrovnávací paměť není uzamčena při volání destruktoru. Příklad této metody naleznete v tématu LockBuffer
.
CSimpleStringT::~CSimpleStringT
CSimpleStringT
Zničí objekt.
Syntaxe
~CSimpleStringT() throw();
Poznámky
Voláním této metody zničíte CSimpleStringT
objekt.