[英]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.