我正在尝试合并 2 个 tchar。
char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
TCHAR* appdatapath ="C:\\Users\\"+username+"\\AppData";
但我在 appdatapath 行收到错误错误。我怎样才能结合2 tchar?谢谢
看看strcat和wcscat。您不能使用 char 数组添加 char 指针。
如果您在 Windows 机器上,您可以使用_tcscat
which 将重定向到正确的函数以根据_UNICODE
和_MBCS
定义使用。
可能还想通过将 _s 附加到函数名称来使用安全版本。
正如评论中所指出的,您也可以像这样使用 snprintf :
const size_t concatenated_size = 256;
char concatenated[concatenated_size];
snprintf(concatenated, concatenated_size, "C:\\Users\\%s\\AppData", username);
由于您在运行时字符串之前和之后都有字符串文字,因此这可能是一种更好的方法。
要回答标题中的问题:您使用该函数连接两个TCHAR
字符串。_tcscat
但是,您的代码中还有其他与此相关的问题:GetUserName
需要 a LPTSTR
,即指向缓冲区TCHAR
字符的指针。此外,还有另一种TCHAR
用法
TCHAR* appdatapath ="C:\\Users\\"+username+"\\AppData";
这样做的问题是,TCHAR
扩展的类型会根据是否_UNICODE
定义而改变。特别是,如果您设置它,TCHAR
(最终)扩展为wchar
并因此GetUserName
期望 awchar_t*
但您通过 a 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”路径。
#include <tchar.h>
const size_t stringSize= 20;
TCHAR value[stringSize] = { 0 };
_tcscat_s(value, stringSize, TEXT("appendMe"));
MSDN:_tcscat_s