如何将常量值转换为非常量变量?

时间:2014-11-06 16:16:55

标签: c++

我有这段代码:

   PARAMS Params;
   Params.pwchFileName = wide.c_str() ;

但我得到了这个错误:

    a value of type "const wchar_t *" cannot be assigned to an entity of type "wchar_t *"

如何进行此项任务?

3 个答案:

答案 0 :(得分:3)

您可以非常谨慎地使用const_cast

const_cast<wchar_t*>( wide.c_str());

但这里还有其他问题:如果widestd::string,那么c_str()的结果只有wide在范围内且没有以任何方式改变了。即使您符合这一点,那么PARAMS 的消费者也可以修改字符串缓冲区,这将为您提供未定义的行为

这里最好的做法是使用strcpy来获取字符串缓冲区的深层副本,一旦完成,就记住delete缓冲区。

答案 1 :(得分:2)

从一个在所有上下文中都是安全的常量值创建非常量值的唯一方法是制作副本:

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;

答案 2 :(得分:1)

您可以使用以下方法强制转换它: -

Params.pwchFileName = const_cast<wchar_t*>( wide.c_str() ); 

但是在没有别的选择时使用const_cast。

小心,写入该对象会调用未定义的行为。