Udostępnij przez


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 Destruktora.

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 bufory 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 CSimpleStringTobiekcie , 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 GetAtelementu .
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łówka: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 CopyCharsprogramu CopyCharsOverlapped zapewnia bezpieczną metodę kopiowania z buforów znaków, które mogą się nakładać.

Przykład

Zobacz przykład dla CSimpleStringT::CopyCharselementu lub kod źródłowy ( CSimpleStringT::SetString znajdujący się w atlsimpstr.hlokalizacji ).

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 CSimpleStringTprogramu , 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 typedefCSimpleString. CSimpleString jest często używaną specjalizacją szablonu CSimpleStringTklasy .

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 GetLengthwartość . 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 GetLengthwartość , 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 CSimpleStringTobiektu .

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ą ReleaseBufferpolecenia . 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 ReleaseBufferparametru , przekaż -1 (wartość domyślna) dla długości ReleaseBufferdo , 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:

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 LockBuffermetodę , 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 LockBufferwywoł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:

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 CSimpleStringTobiekcie , ale nie można jej użyć do zmiany wartości znaku w CSimpleStringTobiekcie .

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 CSimpleStringTobiekcie , ale nie można jej użyć do zmiany wartości znaku w CSimpleStringTobiekcie .

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 GetBufferprogram .

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 GetBufferprogram .

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 GetLengthwartość .

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.

Zobacz też

Wykres hierarchii
Klasy udostępnione ATL/MFC