[英]C++ Combine 2 Tchar
我正在尝试结合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
,它将重定向到正确的功能,具体取决于_UNICODE
和_MBCS
定义。
可能希望通过在函数名称后附加_s来使用安全版本。
正如评论中所指出的,你也可以像这样使用snprintf:
const size_t concatenated_size = 256;
char concatenated[concatenated_size];
snprintf(concatenated, concatenated_size, "C:\\Users\\%s\\AppData", username);
由于在运行时字符串之前和之后都有字符串文字,因此它可能是更好的方法。
要回答标题中的问题:使用_tcscat
函数连接两个TCHAR
字符串。
但是,您的代码中还存在与此相关的其他问题: 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”路径。
#include <tchar.h>
const size_t stringSize= 20;
TCHAR value[stringSize] = { 0 };
_tcscat_s(value, stringSize, TEXT("appendMe"));
MSDN: _tcscat_s
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.