我正在尝试合并 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 机器上,您可以使用_tcscatwhich 将重定向到正确的函数以根据_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