我有這樣的代碼:我怎麼能轉換constat值成非恆定的變量?
PARAMS Params;
Params.pwchFileName = wide.c_str() ;
但我一收到此錯誤:
a value of type "const wchar_t *" cannot be assigned to an entity of type "wchar_t *"
怎樣才能使這項任務?
我有這樣的代碼:我怎麼能轉換constat值成非恆定的變量?
PARAMS Params;
Params.pwchFileName = wide.c_str() ;
但我一收到此錯誤:
a value of type "const wchar_t *" cannot be assigned to an entity of type "wchar_t *"
怎樣才能使這項任務?
您可以通過使用虛擲常量性用力將其轉換: -
Params.pwchFileName = const_cast<wchar_t*>(wide.c_str());
但是用const_cast當你有沒有其他選擇。
小心,寫入該對象調用未定義的行爲。
從恆定一個,這將是安全的所有情況進行非恆定值的唯一方法是使一個副本:
Params.pwchFileName = new char[wide.size()+1];
strcpy(Params.pwchFileName, wide.c_str());
...
// when you are done with the copy, delete it:
delete[] Params.pwchFileName;
你可以,非常謹慎,使用const_cast
:
const_cast<wchar_t*>(wide.c_str());
但其他問題在這裏:如果wide
是std::string
那麼c_str()
結果僅適用於只要wide
是SCOP e並沒有以任何方式改變。即使你符合這一點,那麼PARAMS
消費者可以修改字符串緩衝,這將使你未定義行爲。
這裏要做的最好的事情是使用strcpy
來獲取字符串緩衝區的深層副本,記住一旦完成了緩衝區的設置,就會記住delete
。