C++ 组合 2 查尔

C++ Combine 2 Tchar

本文关键字:查尔 组合 C++      更新时间:2023-10-16

我正在尝试组合 2 tchar。

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

但是我在应用程序数据路径行出现错误错误。如何组合 2 茶匙?谢谢

看看 strcat 和 wcscat。不能使用 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