2016-01-06 123 views
0

如何使用std::wstring變量作爲參數代替swprintf_s而不是wchar_t *使用wstring代替swprintf_s wchar_t *

我的代碼是如以下但具有錯誤:

#include <string> 
#include <iostream> 
using namespace std; 

int main(){ 
    std::wstring  msg(20, 0); 
    swprintf_s(msg.c_str(), 20, L"This is a test for using std::wstring");//this line has error 

wcout<< msg<< endl; 
return 0; 
} 
+0

什麼是錯誤? –

+0

錯誤(活動)重載函數「swprintf_s」的實例與參數列表 – SaeidMo7

+1

不匹配您無法直接執行此操作,因爲底層緩衝區無法寫入。即使您在創意鑄造中強制更新(即長度),字符串對象中的其他字段也不會正確更新(即使您的創意強制轉換會導致奇怪的錯誤稍後顯示)。 – Donnie

回答

0

swprintfswprintf_s寫入由第一個參數指向的存儲器。因此,該參數不能是const char或wchar指針。但是std :: wstring :: c_str()的返回值是const char*。所以你不能只投一次const。正如Jason所說的,如果你違反規則,wstring :: size()可能不會返回正確的值。

你可以做的是

wchar_t * buffer[20]; 

swprintf_s(buffer, 20, L"This is a test for using std::wstring"); 

如果你想要一個std :: wstring的,你可以使用構造函數,像wstring的msg(buffer)

+0

「所以你不能只是拋棄'const'。」 - 你可以,從C++ 11開始。 'msg.c_str()'保證和'&msg [0]'一樣(只要字符串不爲空)。 – hvd

+0

@hvd你在技術上是正確的,但是string.length()不會被更新。 –