繁体   English   中英

C ++ Combine 2 Tchar

[英]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? 谢谢

看看strcatwcscat 您不能使用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传递给它以获取“Ap​​pData”路径。

#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM