-1
在這個問題上有很多問題,我一直在嘗試各種解決方案。似乎有幾十種方法可以做到這一點,但是他們都沒有工作。我對C++和VS非常陌生,工作了大約一個月,我正在嘗試使用VC++編寫一個自動化的Excel程序。我試圖連接一個wchar_t *和一個無符號long long。我假設第一步是將unsigned long long「轉換」爲wchar_t *。我很抱歉拋出整個代碼,但我認爲這可能有助於展示我的目標,以及代碼中是否存在其他弱點。將無符號long long轉換爲wchar_t *並連接
wchar_t * ex(wchar_t * dest, unsigned long long num);
int main()
{
unsigned long long num = 10;
wchar_t *dest= L"A2:B";
wchar_t * Path=ex(dest, num);
VARIANT param;
param.vt = VT_BSTR;
// param.bstrVal = SysAllocString(L"A2:B10");
param.bstrVal = SysAllocString(Path);
getchar();
return 0;
}
wchar_t * ex(wchar_t * dest, unsigned long long num)
{
// Convert num to wchar_t *
wchar_t *rangeMax = (wchar_t *)num;
// I think this is used to eliminate extra space in other solutions
// but not here. It could be useful.
const int MAX_CHARS = 50;
size_t count = wcsnlen_s(dest, MAX_CHARS);
wprintf(L"The length of the string is %ld characters\n", count);
// Throw dest into buf
wchar_t buf[25] = { 0 };
int r = wcscpy_s(buf, 25, dest);
if (r != 0) {
wprintf(L"wcscpy_s() failed %ld", r);
}
r = wcscat_s(buf, 25, rangeMax);
if (r != 0) {
wprintf(L"wcscat_s() failed %ld", r);
}
wprintf_s(buf);
return buf;
}
ex是來自zetcode的編輯示例。我認爲它接近於解決方案,但是當結合buf和rangeMax時,代碼會拋出各種內存異常並失敗。
正如你所看到的,連接wchar_t *的最終目的地是通過SysAllocString作爲VARIANT中的BSTR。
我明白任何有關代碼改進的建議,以及如何使代碼實際運行!
您可以使用[的std :: to_wstring(http://www.cplusplus.com/reference/string/to_wstring/)上'unsingned長long'得到'的std :: wstring'。然後你可以從該字符串中獲得'wchar_t *'或者使用'std :: wstring'(這更簡單)。 – Serikov
這段代碼有幾個bug。返回指向局部變量的指針的函數。一個泄漏內存的函數。類型轉換錯誤。這整個事情需要重寫。 –
感謝您的幫助!我結束了將wstrings和它們結合起來,然後'wchar_t * string2 =(WCHAR *)string.c_str();' –