C++ 组合 2 查尔
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";
但是我在应用程序数据路径行出现错误错误。如何组合 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
相关文章:
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 可组合的lambda/std::函数与std::可选
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 混合组合和继承的C++问题
- 我需要将多个函数组合为一个函数
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 通过组合不同的类型来创建唯一的id
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 模板元编程:如何将参数包组合成新的参数包
- 将gsl c++程序与"英特尔MKL"链接
- 检查向量是否具有所有可能的字符组合
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 如何在加密++中将两个源组合成新的源
- 根中的组合
- 为什么查尔斯不能通过 c++ 捕获 http 请求
- C++ 组合 2 查尔
- 康斯特·查尔 * 变得腐败
- 康斯特查尔..改变