Чтобы ответить на вопрос в заголовке: вы объединяете две строки TCHAR
, используя _tcscat
.
Однако в вашем коде есть другие проблемы, связанные с этим: GetUserName
ожидает LPTSTR
, то есть указатель на буфер TCHAR
символов. Кроме того, есть еще одно использование TCHAR
в
TCHAR* appdatapath ="C:\\Users\\"+username+"\\AppData";
Проблема в том, что тип, до которого расширяется TCHAR
, изменяется в зависимости от того, определен ли _UNICODE
. В частности, если вы установите его, TCHAR
(в конечном итоге) расширится до wchar
и, следовательно, GetUserName
ожидает wchar_t*
, но вы передаете char*
. Другая проблема заключается в том, что вы не можете объединять массивы C с помощью оператора +
.
Я предлагаю перестать беспокоиться о TCHAR
в первую очередь и всегда просто компилировать с определенным _UNICODE
- и использовать wchar
во всем коде. Кроме того, поскольку вы используете C++, просто используйте std::wstring
:
wchar username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserNameW(username, &username_len);
std::wstring appdatapath = L"C:\\Users\\";
appdatapath += username;
appdatapath += L"\\AppData";
И последнее, но не менее важное: весь ваш код, вероятно, можно заменить вызовом SHGetSpecialFolderPath
— передайте ей CSIDL_APPDATA
, чтобы получить путь "AppData".
person
Frerich Raabe
schedule
05.02.2014
std::string
илиstd::wstring
? Или сделать свой собственныйtstring
, используяstd::basic_string<TCHAR>
? - person Some programmer dude   schedule 05.02.2014