2014-01-06 27 views
0

我有一個函數只需要一個LPWSTR作爲參數。不過,我需要在它的結尾添加整數。如何添加整數到LPWSTR

下面是一個例子僞代碼:

int theNumber = 5; 
LPWSTR myLPWSTR = L"Number is: "; 
/* Add theNumber to myLPWSTR */ 
myFunction(myLPWSTR); 

如何做到這一點?

我已經嘗試將int轉換爲LPWSTR,然後連接它們但我沒有成功。我已經嘗試了這一整個上午,但只是不知道如何做到這一點。

我試過了,例如。 wsprintf,_itow_s,c_str和幾乎所有我知道的 - 但只是做不到,它變得非常令人沮喪。

有人請幫忙。

+1

你可以發佈(一些)你試過的代碼嗎? – Angew

+0

請注意,您不能修改'myLPWSTR',因爲它指向常量數據。 – chris

回答

1

假設功能真的需要一個LPWSTR而不是LPCWSTR(即它可以修改傳遞的字符串),你必須做這樣的事情:

int theNumber = 5; 
std::wostringstream s; 
s << L"Number is: " << theNumber; 
std::wstring str = s.str(); 
std::vector<wchar_t> buf(str.begin(), str.end()); 
buf.push_back(0); 
myFunctions(&buf[0]); 

這是必要的,因爲你需要提供wchar_t s的適當nul終止和可修改的緩衝區。 str.c_str()是nul-terminated但不可修改。 &str[0]是可修改的,但不能(保證是)無終止。

+0

@chris當然,謝謝;編輯。我原本在那裏有一個'+ 1',然後決定用'push_back()'去並沒有更新它。顯然你甚至可以在8行示例中獲得代碼氣味。 – Angew

+0

呵呵:)還有一句關於最後一句只適用於pre-C++ 11。從C++ 11開始,它是一個有效的C字符串,並且可以修改,但不包括隱式空值。 Pre-C++ 11也可能存在不連續性。 – chris

+0

@chris您有關於C++ 11的內容嗎?我所能找到的就是's.size()]'引用一個'NUL',並且'&*(s.begin()+ n)==&* s.begin()+ n'成立'0 <= n Angew

0

如果你可以使用C++ 11

std::wstring str = L"Number is: "; 
str += std::to_wstring(42); 
myFunction(str.data()); 

如果不是:

std::wstringstream ss; 
ss << L"Number is: " << 42; 
myFunction(ss.str().c_str()); 

不要忘了包括sstream

+0

如果該函數採用「LPWSTR」,則不適用。你必須使用'&str [0]'而不是讓它修改隱含的null。請注意,此方法僅適用於C++ 11及更高版本。還要注意''data()'等同於C++ 11中的'c_str()'。 – chris

+0

這將是短暫而良好的,但我得到一個錯誤:錯誤C2664:'myFunction':不能將參數1從'const wchar_t *'轉換爲'LPWSTR'。我會檢查現在的其他建議,謝謝:) – user2404495

+1

你的功能是否必須採取LPWSTR?你能不能把它改成LPCWSTR?如果沒有,使用Angews版本將新字符串複製到一個向量中並使用它。 – user1233963