Как я могу подстать TCHAR - PullRequest
       7

Как я могу подстать TCHAR

5 голосов
/ 28 октября 2010

У меня есть TCHAR и значение, как показано ниже:

TCHAR          szDestPathRoot[MAX_PATH]="String This";

Теперь я хочу первые три символа из TCHAR, как показано ниже:

szDestPathRoot.substring(0,2);

Как я могу это сделать.

Ответы [ 4 ]

12 голосов
/ 28 октября 2010

TCHAR[] - это простой массив с нулевым символом в конце (а не класс C ++).В результате отсутствует метод ".substring ()".

TCHAR[] (по определению) может быть либо строкой широких символов (Unicode), либо простой строкой символов (ASCII).Это означает, что для каждой строковой функции есть wcs и str эквивалентов (wcslen() против strlen() и т. Д.).И агностический эквивалент TCHAR времени компиляции, который может быть или / или.

TCHAR эквивалент strncpy() равен tcsncpy().

Заключительное предупреждение: объявитьTCHAR литерал, лучше использовать макрос _T(), как показано в следующем фрагменте:

TCHAR szDestPathRoot[MAX_PATH] = _T("String This");
TCHAR szStrNew[4];
_tcsncpy (str_new, szTestPathRoot, 3);

Эти ссылки могут вас заинтересовать:

3 голосов
/ 28 октября 2010
TCHAR szDestPathRoot[MAX_PATH]="String This";
TCHAR substringValue[4] = {0};
memcpy(substringValue, szDestPathRoot, sizeof(TCHAR) * 3);
1 голос
/ 28 октября 2010

Поскольку вы пометили свой вопрос "C ++", вы можете использовать строковые классы библиотеки std:

std::wstring strDestPathRoot( _T("String This") );
strDestPathRoot.substr( 0, 2 );
1 голос
/ 28 октября 2010

Это несколько уродливо, но если вы точно знаете, что:

  1. Строка содержит не менее 4 TCHAR (3 символа плюс завершающий NUL)
  2. Содержимое строкиможет быть изменено (как в вашем примере).
  3. Вам не нужно сохранять исходную строку нетронутой

Вы можете просто поставить завершающий NUL на 4-й позициисделать строку длиной 3 символа.

szDestPathRoot[3] = _T('\0');

Обратите внимание, что эта операция деструктивна для исходной строки

Вы действительно должны использовать строковый класс в коде C ++.

...