CSimpleStringT
Klasa
Ta klasa reprezentuje CSimpleStringT
obiekt.
Składnia
template <typename BaseType>
class CSimpleStringT
Parametry
BaseType
Typ znaku klasy ciągów. Może być jednym z następujących elementów:
char
(w przypadku ciągów znaków ANSI).wchar_t
(w przypadku ciągów znaków Unicode).TCHAR
(zarówno dla ciągów znaków ANSI, jak i Unicode).
Elementy członkowskie
Definicje typów publicznych
Nazwa/nazwisko | opis |
---|---|
CSimpleStringT::PCXSTR |
Wskaźnik do ciągu stałego. |
CSimpleStringT::PXSTR |
Wskaźnik do ciągu. |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CSimpleStringT::CSimpleStringT |
Konstruuje CSimpleStringT obiekty na różne sposoby. |
CSimpleStringT::~CSimpleStringT |
Destruktor. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CSimpleStringT::Append |
CSimpleStringT Dołącza obiekt do istniejącego CSimpleStringT obiektu. |
CSimpleStringT::AppendChar |
Dołącza znak do istniejącego CSimpleStringT obiektu. |
CSimpleStringT::CopyChars |
Kopiuje znak lub znaki do innego ciągu. |
CSimpleStringT::CopyCharsOverlapped |
Kopiuje znak lub znaki do innego ciągu, w którym nakładają się. |
CSimpleStringT::Empty |
Wymusza, aby ciąg miał długość zero. |
CSimpleStringT::FreeExtra |
Zwalnia wszelkie dodatkowe pamięci przydzielone wcześniej przez obiekt ciągu. |
CSimpleStringT::GetAllocLength |
Pobiera przydzieloną długość CSimpleStringT obiektu. |
CSimpleStringT::GetAt |
Zwraca znak na danej pozycji. |
CSimpleStringT::GetBuffer |
Zwraca wskaźnik do znaków w obiekcie CSimpleStringT . |
CSimpleStringT::GetBufferSetLength |
Zwraca wskaźnik do znaków w CSimpleStringT obiekcie , obcinając do określonej długości. |
CSimpleStringT::GetLength |
Zwraca liczbę znaków w CSimpleStringT obiekcie. |
CSimpleStringT::GetManager |
Pobiera menedżera CSimpleStringT pamięci obiektu. |
CSimpleStringT::GetString |
Pobiera ciąg znaków |
CSimpleStringT::IsEmpty |
Sprawdza, czy CSimpleStringT obiekt nie zawiera znaków. |
CSimpleStringT::LockBuffer |
Wyłącza zliczanie odwołań i chroni ciąg w buforze. |
CSimpleStringT::Preallocate |
Przydziela określoną ilość pamięci dla buforu znaków. |
CSimpleStringT::ReleaseBuffer |
Zwalnia kontrolę buforu zwróconego przez GetBuffer . |
CSimpleStringT::ReleaseBufferSetLength |
Zwalnia kontrolę buforu zwróconego przez GetBuffer . |
CSimpleStringT::SetAt |
Ustawia znak na danej pozycji. |
CSimpleStringT::SetManager |
Ustawia menedżera CSimpleStringT pamięci obiektu. |
CSimpleStringT::SetString |
Ustawia ciąg CSimpleStringT obiektu. |
CSimpleStringT::StringLength |
Zwraca liczbę znaków w określonym ciągu. |
CSimpleStringT::Truncate |
Obcina ciąg do określonej długości. |
CSimpleStringT::UnlockBuffer |
Włącza zliczanie odwołań i zwalnia ciąg w buforze. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
CSimpleStringT::operator PCXSTR |
Bezpośrednio uzyskuje dostęp do znaków przechowywanych w CSimpleStringT obiekcie jako ciągu w stylu C. |
CSimpleStringT::operator[] |
Zwraca znak na danej pozycji — podstawienie operatora dla GetAt elementu . |
CSimpleStringT::operator += |
Łączy nowy ciąg na końcu istniejącego ciągu. |
CSimpleStringT::operator = |
Przypisuje nową wartość do CSimpleStringT obiektu. |
Uwagi
CSimpleStringT
jest klasą bazową dla różnych klas ciągów obsługiwanych przez program Visual C++. Zapewnia minimalną obsługę zarządzania pamięcią obiektu ciągu i podstawowej manipulacji buforem. Aby uzyskać więcej zaawansowanych obiektów ciągów, zobacz CStringT Class
.
Wymagania
Nagłówek: atlsimpstr.h
CSimpleStringT::Append
CSimpleStringT
Dołącza obiekt do istniejącego CSimpleStringT
obiektu.
Składnia
void Append(const CSimpleStringT& strSrc);
void Append(PCXSTR pszSrc, int nLength);
void Append(PCXSTR pszSrc);
Parametry
strSrc
Obiekt CSimpleStringT
do dołączenia.
pszSrc
Wskaźnik do ciągu zawierającego znaki do dołączenia.
nLength
Liczba znaków do dołączenia.
Uwagi
Wywołaj tę metodę, aby dołączyć istniejący CSimpleStringT
obiekt do innego CSimpleStringT
obiektu.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Dołącza znak do istniejącego CSimpleStringT
obiektu.
Składnia
void AppendChar(XCHAR ch);
Parametry
ch
Znak do dołączenia
Uwagi
Wywołaj tę funkcję, aby dołączyć określony znak na końcu istniejącego CSimpleStringT
obiektu.
CSimpleStringT::CopyChars
Kopiuje znak lub znaki do CSimpleStringT
obiektu.
Składnia
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
Wskaźnik do ciągu znaków.
nDestLen
Rozmiar buforu pchDest
pchSrc
Wskaźnik do ciągu zawierającego znaki do skopiowania.
nChars
Liczba pchSrc
znaków do skopiowania.
Uwagi
Wywołaj tę metodę, aby skopiować znaki z pchSrc
do pchDest
ciągu.
Przykład
W poniższym przykładzie pokazano użycie metody 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);
Dane wyjściowe z tego przykładu są następujące:
xxxxxxxxxxxxxxxxxxx
Hello world!xxxxxxx
CSimpleStringT::CopyCharsOverlapped
Kopiuje znak lub znaki do CSimpleStringT
obiektu.
Składnia
static void CopyCharsOverlapped(
XCHAR* pchDest,
const XCHAR* pchSrc,
int nChars) throw();
Parametry
pchDest
Wskaźnik do ciągu znaków.
pchSrc
Wskaźnik do ciągu zawierającego znaki do skopiowania.
nChars
Liczba pchSrc
znaków do skopiowania.
Uwagi
Wywołaj tę metodę, aby skopiować znaki z pchSrc
do pchDest
ciągu. W przeciwieństwie do CopyChars
programu CopyCharsOverlapped
zapewnia bezpieczną metodę kopiowania z znaków, które mogą się nakładać.
Przykład
Zobacz przykład dla CSimpleStringT::CopyChars
elementu lub kod źródłowy ( CSimpleStringT::SetString
znajdujący się w atlsimpstr.h
lokalizacji ).
CSimpleStringT::CSimpleStringT
CSimpleStringT
Tworzy obiekt.
Składnia
CSimpleStringT(const XCHAR* pchSrc, int nLength, IAtlStringMgr* pStringMgr);
CSimpleStringT(PCXSTR pszSrc, IAtlStringMgr* pStringMgr);
CSimpleStringT(const CSimpleStringT& strSrc);
explicit CSimpleStringT(IAtlStringMgr* pStringMgr) throw();
Parametry
strSrc
Istniejący CSimpleStringT
obiekt do skopiowania do tego CSimpleStringT
obiektu.
pchSrc
Wskaźnik do tablicy znaków o długości nLength
, a nie zakończony o wartości null.
pszSrc
Ciąg o wartości null, który ma zostać skopiowany do tego CSimpleStringT
obiektu.
nLength
Liczba znaków w elem pch
.
pStringMgr
Wskaźnik do menedżera CSimpleStringT
pamięci obiektu. Aby uzyskać więcej informacji na temat IAtlStringMgr
zarządzania pamięcią dla CSimpleStringT
programu , zobacz Zarządzanie pamięcią i CStringT
.
Uwagi
Konstruowanie nowego CSimpleStringT
obiektu. Ponieważ konstruktory kopiują dane wejściowe do nowego przydzielonego magazynu, mogą wystąpić wyjątki pamięci.
Przykład
W poniższym przykładzie pokazano użycie CSimpleStringT::CSimpleStringT
metody przy użyciu biblioteki ATL typedef
CSimpleString
. CSimpleString
jest często używaną specjalizacją szablonu CSimpleStringT
klasy .
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
Sprawia, że ten CSimpleStringT
obiekt jest pustym ciągiem i zwalnia pamięć odpowiednio.
Składnia
void Empty() throw();
Uwagi
Aby uzyskać więcej informacji, zobacz Ciągi: CString
Oczyszczanie wyjątków.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::Empty
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString s(pMgr);
ASSERT(s.IsEmpty());
CSimpleStringT::FreeExtra
Zwalnia dodatkową pamięć wcześniej przydzieloną przez ciąg, ale nie jest już potrzebna.
Składnia
void FreeExtra();
Uwagi
Powinno to zmniejszyć obciążenie pamięci używane przez obiekt ciągu. Metoda ponownie przydziela buforowi dokładną długość zwracaną przez GetLength
.
Przykład
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());
Dane wyjściowe z tego przykładu są następujące:
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
Pobiera przydzieloną długość CSimpleStringT
obiektu.
Składnia
int GetAllocLength() const throw();
Wartość zwracana
Liczba znaków przydzielonych dla tego obiektu.
Uwagi
Wywołaj tę metodę, aby określić liczbę znaków przydzielonych dla tego CSimpleStringT
obiektu. Zobacz FreeExtra
przykład wywoływania tej funkcji.
CSimpleStringT::GetAt
Zwraca jeden znak z CSimpleStringT
obiektu.
Składnia
XCHAR GetAt(int iChar) const;
Parametry
iChar
Indeks zerowy znaku w CSimpleStringT
obiekcie. Parametr iChar
musi być większy lub równy 0 i mniejszy niż wartość zwracana przez GetLength
wartość . GetAt
W przeciwnym razie wygeneruje wyjątek.
Wartość zwracana
Element XCHAR
, który zawiera znak na określonej pozycji w ciągu.
Uwagi
Wywołaj tę metodę, aby zwrócić jeden znak określony przez iChar
. Przeciążony operator indeksu dolnego ([]
) jest wygodnym aliasem dla elementu GetAt
. Terminator o wartości null jest adresowany bez generowania wyjątku przy użyciu polecenia GetAt
. Jednak nie jest ona liczone przez GetLength
wartość , a zwracana wartość to 0.
Przykład
W poniższym przykładzie pokazano, jak używać polecenia CSimpleStringT::GetAt
.
CSimpleString s(_T("abcdef"), pMgr);
ASSERT(s.GetAt(2) == _T('c'));
CSimpleStringT::GetBuffer
Zwraca wskaźnik do wewnętrznego buforu CSimpleStringT
znaków dla obiektu.
Składnia
PXSTR GetBuffer(int nMinBufferLength);
PXSTR GetBuffer();
Parametry
nMinBufferLength
Minimalna liczba znaków, które może pomieścić bufor znaków. Ta wartość nie zawiera miejsca dla terminatora o wartości null.
Jeśli nMinBufferLength
jest większy niż długość bieżącego buforu, GetBuffer
niszczy bieżący bufor, zastępuje go buforem żądanego rozmiaru i resetuje liczbę odwołań do obiektu do zera. Jeśli wcześniej wywołaliśmy LockBuffer
ten bufor, utracisz blokadę buforu.
Wartość zwracana
Wskaźnik PXSTR
do buforu znaków obiektu (zakończonego wartością null).
Uwagi
Wywołaj tę metodę, aby zwrócić zawartość buforu CSimpleStringT
obiektu. Zwrócony PXSTR
element nie jest stałą i dlatego umożliwia bezpośrednią modyfikację CSimpleStringT
zawartości.
Jeśli używasz wskaźnika zwróconego przez GetBuffer
, aby zmienić zawartość ciągu, musisz wywołać ReleaseBuffer
metodę w celu zaktualizowania stanu wewnętrznego CSimpleStringT
przed użyciem innych CSimpleStringT
metod.
Adres zwrócony przez GetBuffer
może nie być prawidłowy po wywołaniu metody , ReleaseBuffer
ponieważ dodatkowe CSimpleStringT
operacje mogą spowodować reallokowanie buforu CSimpleStringT
. Bufor nie jest ponownie przydzielany, jeśli nie zmieniasz długości CSimpleStringT
obiektu .
Pamięć buforu jest automatycznie zwalniana, gdy CSimpleStringT
obiekt zostanie zniszczony.
Jeśli będziesz śledzić długość ciągu samodzielnie, nie należy dołączać znaku null zakończenia. Należy jednak określić końcową długość ciągu po zwolnieniu buforu za pomocą ReleaseBuffer
polecenia . Jeśli dołączysz znak null zakończenia, należy przekazać wartość -1 (wartość domyślna) dla długości. ReleaseBuffer
następnie określa długość buforu.
Jeśli nie ma wystarczającej GetBuffer
ilości pamięci do spełnienia żądania, ta metoda zgłasza CMemoryException*
błąd .
Przykład
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
Zwraca wskaźnik do wewnętrznego buforu znaków dla CSimpleStringT
obiektu, obcinając lub zwiększając jego długość, jeśli jest to konieczne, aby dokładnie dopasować długość określoną w nLength
.
Składnia
PXSTR GetBufferSetLength(int nLength);
Parametry
nLength
Dokładny rozmiar buforu CSimpleStringT
znaków w znakach.
Wartość zwracana
Wskaźnik PXSTR
do bufora znaków obiektu (zakończonego wartością null).
Uwagi
Wywołaj tę metodę, aby pobrać określoną długość wewnętrznego buforu CSimpleStringT
obiektu. Zwrócony PXSTR
wskaźnik nie const
jest i w ten sposób umożliwia bezpośrednią modyfikację CSimpleStringT
zawartości.
Jeśli używasz wskaźnika zwróconego przez GetBufferSetLength
, aby zmienić zawartość ciągu, wywołaj metodę ReleaseBuffer
w celu zaktualizowania stanu wewnętrznego CSimpleStringT
przed użyciem innych CSimpleStringT
metod.
Adres zwrócony przez GetBufferSetLength
może nie być prawidłowy po wywołaniu metody , ReleaseBuffer
ponieważ dodatkowe CSimpleStringT
operacje mogą spowodować reallokowanie buforu CSimpleStringT
. Bufor nie jest ponownie przypisywany, jeśli nie zmieniasz długości obiektu CSimpleStringT
.
Pamięć buforu jest automatycznie zwalniana, gdy CSimpleStringT
obiekt zostanie zniszczony.
Jeśli śledzisz długość ciągu samodzielnie, nie dołączaj znaku null zakończenia. Podczas zwalniania buforu należy określić końcową długość ciągu przy użyciu polecenia ReleaseBuffer
. Jeśli dołączysz znak null zakończenia podczas wywoływania ReleaseBuffer
parametru , przekaż -1 (wartość domyślna) dla długości ReleaseBuffer
do , a ReleaseBuffer
w buforze zostanie wykonane polecenie strlen
, aby określić jego długość.
Aby uzyskać więcej informacji na temat zliczania odwołań, zobacz następujące artykuły:
- Zarządzanie okresami istnienia obiektów za pomocą zliczania odwołań w zestawie Windows SDK.
- Implementowanie zliczania odwołań w zestawie Windows SDK.
- Reguły zarządzania liczbami odwołań w zestawie Windows SDK.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Zwraca liczbę znaków w CSimpleStringT
obiekcie.
Składnia
int GetLength() const throw();
Wartość zwracana
Liczba znaków w ciągu.
Uwagi
Wywołaj tę metodę, aby zwrócić liczbę znaków w obiekcie. Liczba nie zawiera terminatora o wartości null.
W przypadku zestawów znaków wielobajtowych (MBCS) GetLength
zlicza każdy 8-bitowy znak; oznacza to, że bajt główny i końcowy w jednym wielobajtowym znaku są liczone jako dwa bajty. Zobacz FreeExtra
przykład wywoływania tej funkcji.
CSimpleStringT::GetManager
Pobiera menedżera CSimpleStringT
pamięci obiektu.
Składnia
IAtlStringMgr* GetManager() const throw();
Wartość zwracana
Wskaźnik do menedżera pamięci dla CSimpleStringT
obiektu.
Uwagi
Wywołaj tę metodę, aby pobrać menedżera pamięci używanego CSimpleStringT
przez obiekt. Aby uzyskać więcej informacji na temat menedżerów pamięci i obiektów ciągów, zobacz Zarządzanie pamięcią i CStringT
.
CSimpleStringT::GetString
Pobiera ciąg znaków.
Składnia
PCXSTR GetString() const throw();
Wartość zwracana
Wskaźnik do ciągu znaku zakończonego wartością null.
Uwagi
Wywołaj tę metodę, aby pobrać ciąg znaków skojarzony z obiektem CSimpleStringT
.
Uwaga
Zwrócony PCXSTR
wskaźnik to const
i nie zezwala na bezpośrednią modyfikację CSimpleStringT
zawartości.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::GetString
.
CAtlString basestr;
IAtlStringMgr* pMgr = basestr.GetManager();
CSimpleString str(pMgr);
str += _T("Cup soccer is best!");
_tprintf_s(_T("%s"), str.GetString());
Dane wyjściowe z tego przykładu są następujące:
Cup soccer is best!
CSimpleStringT::IsEmpty
Testuje obiekt pod kątem CSimpleStringT
pustego warunku.
Składnia
bool IsEmpty() const throw();
Wartość zwracana
Zwraca TRUE
wartość , jeśli CSimpleStringT
obiekt ma długość 0; w przeciwnym razie FALSE
.
Uwagi
Wywołaj tę metodę, aby określić, czy obiekt zawiera pusty ciąg.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::IsEmpty
.
CSimpleString s(pMgr);
ASSERT(s.IsEmpty());
CSimpleStringT::LockBuffer
Wyłącza zliczanie odwołań i chroni ciąg w buforze.
Składnia
PXSTR LockBuffer();
Wartość zwracana
Wskaźnik do CSimpleStringT
obiektu lub ciągu zakończonego wartością null.
Uwagi
Wywołaj tę metodę, aby zablokować bufor CSimpleStringT
obiektu. Wywołując LockBuffer
metodę , należy utworzyć kopię ciągu z wartością -1 dla liczby odwołań. Gdy wartość liczby odwołań wynosi -1, ciąg w buforze jest uznawany za w stanie "zablokowany". W stanie zablokowanym ciąg jest chroniony na dwa sposoby:
Żaden inny ciąg nie może uzyskać odwołania do danych w zablokowanym ciągu, nawet jeśli ten ciąg jest przypisany do zablokowanego ciągu.
Zablokowany ciąg nigdy nie odwołuje się do innego ciągu, nawet jeśli inny ciąg zostanie skopiowany do zablokowanego ciągu.
Blokując ciąg w buforze, upewnij się, że blokada ciągu na buforze pozostanie nienaruszona.
Po zakończeniu pracy z LockBuffer
wywołaniem metody wywołaj polecenie UnlockBuffer
, aby zresetować liczbę odwołań do 1.
Uwaga
Jeśli wywołasz GetBuffer
zablokowany bufor i ustawisz GetBuffer
parametr nMinBufferLength
na większą niż długość bieżącego buforu, utracisz blokadę buforu. Takie wywołanie GetBuffer
spowoduje zniszczenie bieżącego buforu, zastąpienie go buforem żądanego rozmiaru i zresetowanie liczby odwołań do zera.
Aby uzyskać więcej informacji na temat zliczania odwołań, zobacz następujące artykuły:
Zarządzanie okresami istnienia obiektów za pomocą zliczania odwołań w zestawie Windows SDK
Implementowanie zliczania odwołań w zestawie Windows SDK
Reguły zarządzania liczbami odwołań w zestawie Windows SDK
Przykład
W poniższym przykładzie pokazano użycie metody 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();
Dane wyjściowe z tego przykładu są następujące:
l
CSimpleStringT::operator[]
Wywołaj tę funkcję, aby uzyskać dostęp do pojedynczego znaku tablicy znaków.
Składnia
XCHAR operator[](int iChar) const;
Parametry
iChar
Indeks zerowy znaku w ciągu.
Uwagi
Operator przeciążonego indeksu dolnego ([]
) zwraca pojedynczy znak określony przez indeks oparty na zerze w elem iChar
. Ten operator jest wygodnym zamiennikiem funkcji składowej GetAt
.
Uwaga
Możesz użyć operatora indeksu dolnego ([]
), aby uzyskać wartość znaku w CSimpleStringT
obiekcie , ale nie można jej użyć do zmiany wartości znaku w CSimpleStringT
obiekcie .
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::operator []
.
CSimpleString s(_T("abc"), pMgr);
ASSERT(s[1] == _T('b'));
CSimpleStringT::operator []
Wywołaj tę funkcję, aby uzyskać dostęp do pojedynczego znaku tablicy znaków.
Składnia
XCHAR operator[](int iChar) const;
Parametry
iChar
Indeks zerowy znaku w ciągu.
Uwagi
Operator przeciążonego indeksu dolnego ([]
) zwraca pojedynczy znak określony przez indeks oparty na zerze w elem iChar
. Ten operator jest wygodnym zamiennikiem funkcji składowej GetAt
.
Uwaga
Możesz użyć operatora indeksu dolnego ([]
), aby uzyskać wartość znaku w CSimpleStringT
obiekcie , ale nie można jej użyć do zmiany wartości znaku w CSimpleStringT
obiekcie .
CSimpleStringT::operator +=
Łączy nowy ciąg lub znak na końcu istniejącego ciągu.
Składnia
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
Wskaźnik do ciągu zakończonego wartością null.
strSrc
Wskaźnik do istniejącego CSimpleStringT
obiektu.
ch
Znak do dołączenia.
Uwagi
Operator akceptuje inny CSimpleStringT
obiekt lub znak. Należy pamiętać, że wyjątki pamięci mogą wystąpić za każdym razem, gdy używasz tego operatora łączenia, ponieważ nowy magazyn może zostać przydzielony do znaków dodanych do tego CSimpleStringT
obiektu.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::operator +=
.
CSimpleString str(_T("abc"), pMgr);
ASSERT(_tcscmp((str += _T("def")), _T("abcdef")) == 0);
CSimpleStringT::operator =
Przypisuje nową wartość do CSimpleStringT
obiektu.
Składnia
CSimpleStringT& operator =(PCXSTR pszSrc);
CSimpleStringT& operator =(const CSimpleStringT& strSrc);
Parametry
pszSrc
Wskaźnik do ciągu zakończonego wartością null.
strSrc
Wskaźnik do istniejącego CSimpleStringT
obiektu.
Uwagi
Jeśli ciąg docelowy (po lewej stronie) jest już wystarczająco duży, aby przechowywać nowe dane, nie jest wykonywana żadna nowa alokacja pamięci. Należy pamiętać, że wyjątki pamięci mogą wystąpić za każdym razem, gdy używasz operatora przypisania, ponieważ nowy magazyn jest często przydzielany do przechowywania wynikowego CSimpleStringT
obiektu.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Bezpośrednio uzyskuje dostęp do znaków przechowywanych w CSimpleStringT
obiekcie jako ciągu w stylu C.
Składnia
operator PCXSTR() const throw();
Wartość zwracana
Wskaźnik znaku do danych ciągu.
Uwagi
Nie są kopiowane żadne znaki; zwracany jest tylko wskaźnik. Należy zachować ostrożność przy użyciu tego operatora. Jeśli zmienisz CString
obiekt po uzyskaniu wskaźnika znaku, może to spowodować reallokację pamięci, która unieważnia wskaźnik.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Wskaźnik do ciągu stałego.
Składnia
typedef ChTraitsBase< BaseType >::PCXSTR PCXSTR;
CSimpleStringT::Preallocate
Przydziela określoną ilość bajtów dla CSimpleStringT
obiektu.
Składnia
void Preallocate( int nLength);
Parametry
nLength
Dokładny rozmiar buforu CSimpleStringT
znaków w znakach.
Uwagi
Wywołaj tę metodę, aby przydzielić określony rozmiar buforu CSimpleStringT
dla obiektu.
CSimpleStringT
Generuje wyjątek, STATUS_NO_MEMORY
jeśli nie może przydzielić miejsca dla buforu znaków. Domyślnie alokacja pamięci jest wykonywana przez funkcje HeapAlloc
interfejsu API WIN32 lub HeapReAlloc
.
Przykład
W poniższym przykładzie pokazano użycie metody 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());
Dane wyjściowe z tego przykładu są następujące:
Allocated length: 0
Allocated length: 103
CSimpleStringT::PXSTR
Wskaźnik do ciągu.
Składnia
typedef ChTraitsBase< BaseType >::PXSTR PXSTR;
CSimpleStringT::ReleaseBuffer
Zwalnia kontrolę nad buforem przydzielonym przez GetBuffer
program .
Składnia
void ReleaseBuffer(int nNewLength = -1);
Parametry
nNewLength
Nowa długość ciągu w znakach, nie licząc terminatora o wartości null. Jeśli ciąg ma wartość null, wartość domyślna -1 ustawia CSimpleStringT
rozmiar na bieżącą długość ciągu.
Uwagi
Wywołaj tę metodę, aby ponownie przydzielić lub zwolnić bufor obiektu ciągu. Jeśli wiesz, że ciąg w buforze ma wartość null, możesz pominąć nNewLength
argument. Jeśli ciąg nie jest zakończony o wartości null, użyj polecenia nNewLength
, aby określić jego długość. Adres zwrócony przez GetBuffer
element jest nieprawidłowy po wywołaniu ReleaseBuffer
metody lub dowolnej innej CSimpleStringT
operacji.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Zwalnia kontrolę nad buforem przydzielonym przez GetBuffer
program .
Składnia
void ReleaseBufferSetLength(int nNewLength);
Parametry
nNewLength
Długość zwalnianego ciągu
Uwagi
Ta funkcja jest funkcjonalnie podobna do ReleaseBuffer
tej, z tą różnicą, że należy przekazać prawidłową długość obiektu ciągu.
CSimpleStringT::SetAt
Ustawia pojedynczy znak z CSimpleStringT
obiektu.
Składnia
void SetAt(int iChar, XCHAR ch);
Parametry
iChar
Indeks zerowy znaku w CSimpleStringT
obiekcie. Parametr iChar
musi być większy lub równy 0 i mniejszy niż wartość zwracana przez GetLength
wartość .
ch
Nowy znak.
Uwagi
Wywołaj tę metodę, aby zastąpić znak znajdujący się w lokalizacji iChar
. Ta metoda nie powiększy ciągu, jeśli iChar
przekroczy granice istniejącego ciągu.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::SetAt
.
CSimpleString s(_T("abcdef"), pMgr);
s.SetAt(1, _T('a'));
ASSERT(_tcscmp(s, _T("aacdef")) == 0);
CSimpleStringT::SetManager
Określa menedżera CSimpleStringT
pamięci obiektu.
Składnia
void SetManager(IAtlStringMgr* pStringMgr);
Parametry
pStringMgr
Wskaźnik do nowego menedżera pamięci.
Uwagi
Wywołaj tę metodę, aby określić nowy menedżer pamięci używany przez CSimpleStringT
obiekt. Aby uzyskać więcej informacji na temat menedżerów pamięci i obiektów ciągów, zobacz Zarządzanie pamięcią i CStringT
.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::SetManager
.
CSimpleString s(pMgr);
s.SetManager(pCustomMgr);
CSimpleStringT::SetString
Ustawia ciąg CSimpleStringT
obiektu.
Składnia
void SetString(PCXSTR pszSrc, int nLength);
void SetString(PCXSTR pszSrc);
Parametry
pszSrc
Wskaźnik do ciągu zakończonego wartością null.
nLength
Liczba znaków w elem pszSrc
.
Uwagi
Skopiuj ciąg do CSimpleStringT
obiektu. SetString
zastępuje starsze dane ciągów w buforze.
Obie wersje sprawdzania SetString
, czy pszSrc
jest wskaźnikiem o wartości null, a jeśli tak, zgłaszają E_INVALIDARG
błąd.
Wersja parametru jednoparametrowego SetString
oczekuje pszSrc
wskazywania ciągu zakończonego wartością null.
Wersja dwóch parametrów SetString
oczekuje pszSrc
się również ciągu zakończonego wartością null. Używa nLength
jako długości ciągu, chyba że napotka pierwszy terminator o wartości null.
Wersja dwuparametrowa SetString
programu sprawdza również, czy pszSrc
wskazuje lokalizację w bieżącym buforze w pliku CSimpleStringT
. W tym specjalnym przypadku używa funkcji kopiowania pamięci, SetString
która nie zastępuje danych ciągu, ponieważ kopiuje dane ciągu z powrotem do buforu.
Przykład
W poniższym przykładzie pokazano użycie metody 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
Zwraca liczbę znaków w określonym ciągu.
Składnia
ATL_NOINLINE static int StringLength(PCXSTR psz) throw();
Parametry
psz
Wskaźnik do ciągu zakończonego wartością null.
Wartość zwracana
Liczba znaków w obiekcie psz
; nie licząc terminatora o wartości null.
Uwagi
Wywołaj tę metodę, aby pobrać liczbę znaków w ciągu wskazywaną przez psz
.
Przykład
W poniższym przykładzie pokazano użycie metody CSimpleStringT::StringLength
.
ASSERT(CSimpleString::StringLength(_T("soccer")) == 6);
CSimpleStringT::Truncate
Obcina ciąg do nowej długości.
Składnia
void Truncate(int nNewLength);
Parametry
nNewLength
Nowa długość ciągu.
Uwagi
Wywołaj tę metodę, aby obcinać zawartość ciągu do nowej długości.
Uwaga
Nie ma to wpływu na przydzieloną długość buforu. Aby zmniejszyć lub zwiększyć bieżący bufor, zobacz FreeExtra
i Preallocate
.
Przykład
W poniższym przykładzie pokazano użycie metody 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);
Dane wyjściowe z tego przykładu to:
String length: 9 / Allocated length: 15
Contents: abcdefghi
String length: 4 / Allocated length: 15
Contents: abcd
CSimpleStringT::UnlockBuffer
Odblokuje bufor CSimpleStringT
obiektu.
Składnia
void UnlockBuffer() throw();
Uwagi
Wywołaj tę metodę, aby zresetować liczbę odwołań ciągu do 1.
Destruktor CSimpleStringT
automatycznie wywołuje UnlockBuffer
metodę , aby upewnić się, że bufor nie jest zablokowany po wywołaniu destruktora. Aby zapoznać się z przykładem tej metody, zobacz LockBuffer
.
CSimpleStringT::~CSimpleStringT
CSimpleStringT
Niszczy obiekt.
Składnia
~CSimpleStringT() throw();
Uwagi
Wywołaj tę metodę, aby zniszczyć CSimpleStringT
obiekt.