Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Visual C++ предоставляет несколько способов управления строковыми данными:
Обработка строк для работы с строками в стиле
NULL
CФункции API Win32 для управления строками
Класс класса
CStringT
MFC, предоставляющий гибкие, изменяемые объекты строкКласс класса
CStringT
, который предоставляет объект строки, независимый от MFC, с той же функциональностью, что иCString
Почти все программы работают со строковыми данными. Класс MFC CString
часто является лучшим решением для гибкой обработки строк. Начиная с версии 7.0, CString
можно использовать в программах, независимых от MFC или MFC. Библиотека времени выполнения и CString
строки поддержки, содержащие многобайтовые (широкие) символы, как и в программировании Юникода или MBCS.
В этой статье описываются службы общего назначения, предоставляемые библиотекой классов, связанные с обработкой строк. В этой статье рассматриваются следующие темы:
CStringT
Класс класса обеспечивает поддержку управления строками. Он предназначен для замены и расширения функциональных возможностей, предоставляемых пакетом строки библиотеки времени выполнения C. Класс CString
предоставляет функции-члены и операторы для упрощенной обработки строк, аналогичных тем, которые найдены в Basic. Класс также предоставляет конструкторы и операторы для создания, назначения и сравнения CString
типов строковых данных C++ и S++. Так как CString
не является производным CObject
от, можно использовать CString
объекты независимо от большинства библиотек классов Microsoft Foundation (MFC).
CString
объекты соответствуют семантике значений. CString
Объект представляет уникальное значение. Подумайте о CString
фактической строке, а не как указатель на строку.
CString
Объект представляет последовательность переменной числа символов. CString
объекты можно рассматривать как массивы символов.
Юникод и MBCS обеспечивают переносимость
В MFC версии 3.0 и более поздних версиях MFC, включая CString
MFC, включен как для наборов символов Юникода, так и для многобайтовых наборов символов (MBCS). Эта поддержка упрощает написание переносимых приложений, которые можно создавать для символов Юникода или ANSI. Чтобы включить переносимость, каждый символ в CString
объекте имеет тип TCHAR
, который определяется как wchar_t
если бы вы определили символ _UNICODE
при сборке приложения или как char
будто нет. Символ wchar_t
имеет ширину 16 битов. MBCS включен при сборке с определенным символом _MBCS
. Сам MFC создается с _MBCS
помощью символа (для библиотек NAFX) или _UNICODE
символа (для библиотек UAFX).
Примечание.
В CString
примерах этого и сопроводительных статьях в строках отображаются литеральные строки, правильно отформатированные для переносимости Юникода, с помощью _T
макроса, который преобразует литеральную строку в форму:
L"literal string"
Примечание.
который компилятор обрабатывает как строку Юникода. Например, приведенный ниже код
CString strName = _T("Name");
Примечание.
преобразуется как строка Юникода, если _UNICODE
она определена или как строка ANSI, если нет. Дополнительные сведения см. в статье Поддержка Юникода и многобайтового набора символов (MBCS).
Объект CString
может хранить до INT_MAX
(2 147 483 647) символов. Тип TCHAR
данных используется для получения или задания отдельных символов внутри CString
объекта. В отличие от массивов символов, CString
класс имеет встроенную возможность выделения памяти. Это позволяет CString
объектам автоматически расти по мере необходимости (т. е. вам не нужно беспокоиться о росте CString
объекта для размещения более длинных строк).
CStrings
и const char
указатели
Объект CString
также может выступать как строка стиля C литерала (то PCXSTR
же самое, что const char*
и в Юникоде). Оператор CSimpleStringT::operator PCXSTR
преобразования позволяет CString
объектам свободно заменяться указателями символов в вызовах функций. Конструктор CString(LPCWSTR pszSrc)
позволяет заменять указатели символов объектами CString
.
Попытка сложить CString
объекты не выполняется. При создании двух CString
объектов, содержащих Chicago
, например, символы хранятся Chicago
в двух местах. (Это может быть не верно для будущих версий MFC, поэтому вы не должны зависеть от него.)
Примечание.
Используйте функции-члены CSimpleStringT::GetBuffer
CSimpleStringT::ReleaseBuffer
, если необходимо напрямую получить доступ к CString
символу, отличному от неконстантного указателя.
Примечание.
CStringT::AllocSysString
CStringT::SetSysString
Используйте функции-члены для выделения и задания BSTR
объектов, используемых в службе автоматизации (прежнее название — OLE Automation).
Примечание.
По возможности выделите CString
объекты на кадре, а не на куче. Это экономит память и упрощает передачу параметров.
Класс CString
не реализуется как класс коллекции библиотек классов Microsoft Foundation, хотя CString
объекты, безусловно, могут храниться как элементы в коллекциях.
CString
Подсчет ссылок
По состоянию на MFC версии 4.0 при CStringT
копировании объектов класса MFC увеличивает число ссылок, а не копирует данные. Это делает передачу параметров по значению и возврату CString
объектов по значению более эффективным. Эти операции приводят к вызову конструктора копирования, иногда несколько раз. Увеличение количества ссылок уменьшает затраты на эти распространенные операции и делает использование CString
более привлекательным вариантом.
По мере уничтожения каждой копии количество ссылок в исходном объекте уменьшается. Исходный CString
объект не уничтожается до тех пор, пока его число ссылок не уменьшается до нуля.
Вы можете использовать функции-члены CString
CSimpleStringT::LockBuffer
и CSimpleStringT::UnlockBuffer
отключить или включить подсчет ссылок.