Поделиться через


Управление строковыми данными

Visual C++ предоставляет несколько способов управления строковыми данными:

  • Обработка строк для работы с строками в стиле NULLC

  • Функции API Win32 для управления строками

  • Класс класса CStringT MFC, предоставляющий гибкие, изменяемые объекты строк

  • Класс классаCStringT, который предоставляет объект строки, независимый от MFC, с той же функциональностью, что иCString

Почти все программы работают со строковыми данными. Класс MFC CString часто является лучшим решением для гибкой обработки строк. Начиная с версии 7.0, CString можно использовать в программах, независимых от MFC или MFC. Библиотека времени выполнения и CString строки поддержки, содержащие многобайтовые (широкие) символы, как и в программировании Юникода или МБ CS.

В этой статье описываются службы общего назначения, предоставляемые библиотекой классов, связанные с обработкой строк. В этой статье рассматриваются следующие темы:

CStringT Класс класса обеспечивает поддержку управления строками. Он предназначен для замены и расширения функциональных возможностей, предоставляемых пакетом строки библиотеки времени выполнения C. Класс CString предоставляет функции-члены и операторы для упрощенной обработки строк, аналогичных тем, которые найдены в Basic. Класс также предоставляет конструкторы и операторы для создания, назначения и сравнения CStringтипов строковых данных C++ и S++. Так как CString не является производным CObjectот, можно использовать CString объекты независимо от большинства библиотек классов Microsoft Foundation (MFC).

CString объекты соответствуют семантике значений. CString Объект представляет уникальное значение. Подумайте о CString фактической строке, а не как указатель на строку.

CString Объект представляет последовательность переменной числа символов. CString объекты можно рассматривать как массивы символов.

Юникод и МБ CS обеспечивают переносимость

В MFC версии 3.0 и более поздних версиях MFC, включая CStringMFC, включен для наборов символов Юникода и многобайтов (МБ CS). Эта поддержка упрощает написание переносимых приложений, которые можно создавать для символов Юникода или ANSI. Чтобы включить переносимость, каждый символ в CString объекте имеет тип TCHAR, который определяется как wchar_t если бы вы определили символ _UNICODE при сборке приложения или как char будто нет. Символ wchar_t имеет ширину 16 битов. МБ CS включен при сборке с определенным символом_MBCS. Сам MFC создается с _MBCS помощью символа (для библиотек NAFX) или _UNICODE символа (для библиотек UAFX).

Примечание.

В CString примерах этого и сопроводительных статьях в строках отображаются литеральные строки, правильно отформатированные для переносимости Юникода, с помощью _T макроса, который преобразует литеральную строку в форму:

L"literal string"

Примечание.

который компилятор обрабатывает как строку Юникода. Например, приведенный ниже код

CString strName = _T("Name");   

Примечание.

преобразуется как строка Юникода, если _UNICODE она определена или как строка ANSI, если нет. Дополнительные сведения см. в статье Поддержка Юникода и многобайтового набора символов (МБ CS).

Объект 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::GetBufferCSimpleStringT::ReleaseBuffer , если необходимо напрямую получить доступ к CString символу, отличному от неконстантного указателя.

Примечание.

CStringT::AllocSysStringCStringT::SetSysString Используйте функции-члены для выделения и задания BSTR объектов, используемых в службе автоматизации (прежнее название — OLE Automation).

Примечание.

По возможности выделите CString объекты на кадре, а не на куче. Это экономит память и упрощает передачу параметров.

Класс CString не реализуется как класс коллекции библиотек классов Microsoft Foundation, хотя CString объекты, безусловно, могут храниться как элементы в коллекциях.

CString Подсчет ссылок

По состоянию на MFC версии 4.0 при CStringT копировании объектов класса MFC увеличивает число ссылок, а не копирует данные. Это делает передачу параметров по значению и возврату CString объектов по значению более эффективным. Эти операции приводят к вызову конструктора копирования, иногда несколько раз. Увеличение количества ссылок уменьшает затраты на эти распространенные операции и делает использование CString более привлекательным вариантом.

По мере уничтожения каждой копии количество ссылок в исходном объекте уменьшается. Исходный CString объект не уничтожается до тех пор, пока его число ссылок не уменьшается до нуля.

Вы можете использовать функции-члены CStringCSimpleStringT::LockBuffer и CSimpleStringT::UnlockBuffer отключить или включить подсчет ссылок.

См. также

Общие разделы по MFC