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


CString операции, относящиеся к строк в стиле языка C

Объект CString содержит данные строк символов.CString наследует набор методы и операторы, указанное в шаблоне CStringT класса для работы с данными строки.(CStringtypedef, специализирует CStringT для работы с типом символьных данных, CString поддерживается).

CString не сохраняет символьные данные внутренне, как c - стиль null- готовая строка.Вместо этого CString отслеживает длина символьных данных так, чтобы они могли более безопасно контрольных данных и пространство требуется.

CString принимает строки в стиле языка C, а также способы доступа к символьные данные c. вставка строки как стили.Этот раздел содержит следующие подразделы, в которых описывается, как использовать объект CString если было завершено стиле ЯЗЫКА c. null- строка.

  • Преобразование в строки null- завершение выполнения C учетом

  • Работа со стандартными функциями строки библиотеки времени выполнения

  • Изменение содержимого непосредственно CString

  • Использование объектов CString с переменными функциями аргумента

  • Указание формальных параметров CString

Использование CString как c - стиль Null- Завершен строка

Чтобы использовать объект CString c. вставка строки как стили, приведение объекта к LPCTSTR.В следующем примере CString возвращает указатель на строку только для чтения null- завершенной C стилем.Функция strcpy помещает копию строк в стиле языка C в myString переменной.

    CString aCString = "A string";
    char myString[256];
    strcpy(myString, (LPCTSTR)aString);

Можно использовать методы CString, например, SetAt, чтобы изменить отдельные знаки в строковом объекте.Однако указатель LPCTSTR является временным и становится недопустимым, если выполняется любое изменение CString.CString также может переходить из области и быть автоматически удалено.Рекомендуется получить свежему указателю LPCTSTR объекта CString каждый раз, который используется одно.

Иногда может потребоваться копия данных по CString изменившего напрямую.Используйте функцию, предоставляя strcpy_s (или Юникод) Или MBCS-portable _tcscpy_s для копирования объект CString в отдельном буфер.Здесь можно безопасно изменить символы, как показано в следующем примере.

CString theString(_T("This is a test"));
int sizeOfString = (theString.GetLength() + 1);
LPTSTR lpsz = new TCHAR[sizeOfString];
_tcscpy_s(lpsz, sizeOfString, theString);
//... modify lpsz as much as you want   
ПримечаниеПримечание

Третий аргумент strcpy_s (или Юникод И MBCS-portable _tcscpy_s) или constwchar_t* (Юникод) или constchar* (ANSI).Пропуски примера вышеуказанных CString для этого аргумента.Компилятор C++ автоматически применяет заданную функцию преобразования для класса CString, который выполняет преобразование CString к LPCTSTR.Возможность определения операции приведения одного типа к другому одна из наиболее полезных функций C++.

Работа со стандартными функциями строки библиотеки времени выполнения

Необходимо иметь возможность найти метод CString для выполнения любой операции строки, для которой можно использовать строковые функции библиотеки времени выполнения языка c, как strcmp стандарта Юникод (или/MBCS-portable _tcscmp).

Если необходимо использовать функции времени выполнения строки на c#, можно использовать методы, описанные в Преобразование в строки Null- завершение выполнения C Учетом_core_using_cstring_as_a_c.2d.style_null.2d.terminated_string.Можно скопировать объект, эквивалентный CString на буфер строк в стиле языка C, выполнения операций в буфере, а затем присвоить результирующая строка в стиле обратно в объект CString.

Изменение содержимого непосредственно CString

В большинстве ситуаций, необходимо использовать функции-члены CString чтобы изменить содержимое объекта CString или преобразовать в CString c. вставка символьную строку стиля.

Некоторые ситуации, когда оно имеет смысл непосредственно изменять содержимое CString, например, при работе с функциями операционной системы, требующие буфера знаков.

Доступ методов GetBuffer предложения и ReleaseBuffer на внутренний буфер символов CString возражает и автоматически изменить препятствовал его напрямую.Следующие шаги показывают, как использовать эти функции для этой цели.

Для использования GetBuffer и ReleaseBuffer открыть внутренний буфер символов объект CString

  1. Вызовите GetBuffer для объекта CString и задайте длину буфера.

  2. Используйте возвращенный указатель GetBuffer к символам записи непосредственно в объект CString.

  3. Вызовите ReleaseBuffer для объекта CString чтобы обновить все внутренние сведения о состоянии CString, например длина строки.После изменения содержимого CString объект непосредственно, необходимо вызвать ReleaseBuffer перед вызовом любой другой функции элементов CString.

Использование объектов CString с переменными функциями аргумента

Некоторые функции c принимающих переменное число аргументов.Знатный примере printf_s.Из-за способа этот тип функции может быть объявлен, компилятор не обязательно типа аргументов и не может определить, что операция преобразования выполнить на каждом аргументе.Поэтому необходимо использовать явное приведение типов, передавая объект CString функции, которая принимает переменное число аргументов.

Чтобы использовать объект CString в переменной функции аргумента, явно привести CString в строке LPCTSTR, как показано в следующем примере.

CString kindOfFruit = _T("bananas");
int howmany = 25;
_tprintf_s(_T("You have %d %s\n"), howmany, (LPCTSTR)kindOfFruit);    

Указание формальных параметров CString

Для большинства функций, которым необходим аргумент строки, лучше указывать формальный параметр в прототипе функции, такие как указатель const в символ (LPCTSTR) вместо CString.Если формальный параметр определен как указатель const к символу, можно передать или указатель на массив TCHAR, литеральной строки ["hi there"] Или объекту CString.Объект CString автоматически будет преобразовать в LPCTSTR.Можно использовать любое место LPCTSTR, можно также использовать объект CString.

Также можно указать формальный параметр, так как постоянный ссылка строки (то есть constCString&) если аргумент не будет изменен.Удалите модификатор const если строка будет изменена функцией.Если значение по умолчанию NULL, то нужно инициализировать его в строку со значением NULL [""], как показано ниже:

void AddCustomer(const CString& name, const CString& address, 
   const CString& comment = _T(""));

Для большинства результатов функций можно просто возвращать объект CString значением.

См. также

Основные понятия

Передача аргумента CString

Другие ресурсы

String (ATL/MFC)