Вы можете использовать strtok()
(и его родственников в Windows) только с изменяемыми строками. Поэтому сделайте ваши строки локальными массивами символов:
TCHAR str1[] = TEXT("C:\\Program Files\\Internet Explorer;");
TCHAR* token = _tcstok(str1, ";");
// etc.
Функция токенизатора фактически изменяет строку, заменяя разделитель нулевыми байтами, поэтому вы не можете использовать это для строки только для чтения.
Если ваша строка приходит к вам через указатель на константу, сначала скопируйте ее в локальный массив (например, в std::vector<TCHAR>
):
void foo(const TCHAR * str)
{
std::vector<TCHAR> s(str, _tcslen(str) + 1); // local copy, includes null terminator
TCHAR * str1 = s.data(); // or &s[0]
TCHAR* token = _tcstok(str1, ";");
// ...
}