6

我正在尝试合并 2 个 tchar。

char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
TCHAR* appdatapath ="C:\\Users\\"+username+"\\AppData";

但我在 appdatapath 行收到错误错误。我怎样才能结合2 tchar?谢谢

4

3 回答 3

5

看看strcatwcscat。您不能使用 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);

由于您在运行时字符串之前和之后都有字符串文字,因此这可能是一种更好的方法。

于 2014-02-05T13:20:45.557 回答
4

要回答标题中的问题:您使用该函数连接两个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给它以获取“Ap​​pData”路径。

于 2014-02-05T13:46:10.387 回答
2
#include <tchar.h>

const size_t stringSize= 20;
TCHAR value[stringSize] = { 0 };

_tcscat_s(value, stringSize, TEXT("appendMe"));

MSDN:_tcscat_s

于 2018-11-02T15:34:03.027 回答