簡體   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