Прежде всего, ваш код представляет собой беспорядочную смесь манипуляций со строками C и C ++.Это просто закопает вас в яму.В идеале вы должны разбить строку на std::vector<std::wstring>
Кроме того, вы очень запутались в TCHAR
и UTF-8.TCHAR
- это тип символов, который «плавает» между 8 и 16 битами в зависимости от флагов времени компиляции.Файлы UTF-8 используют от одного до четырех байтов для представления каждого символа.Итак, вы, вероятно, хотите сохранить текст как std::wstring
объекты, но вам нужно явно преобразовать UTF-8 в строки wstring.
Но, если вы просто хотите получить что-нибудь работает, сосредоточьтесь на своем токенизации.Вам нужно хранить адрес начала каждого токена (как TCHAR*
), но вместо этого ваш вектор является вектором TCHAR
s.Когда вы пытаетесь использовать данные токена, вы приводите указатели TCHAR
s к TCHAR*
, что является неудивительным результатом нарушений доступа.Ваш AV-адрес 0x0000006c
, который является кодом ASCII для символа l
.
vector<TCHAR*> cells;
...
cells.push_back(pch);
... и затем ...
TCHAR *original_document = cells[column_holding_doc];
TCHAR *pc = _tcstok(original_document," ");