将const char *转换为char *崩溃

时间:2013-04-15 15:49:57

标签: c++ casting string-literals

当我尝试将const char*投射到char*时,它会崩溃:

int myfunc(const char*);
const char * str = "test";
myfunc( (char*)str ) // crash

我该怎么做?

2 个答案:

答案 0 :(得分:4)

你正在做的是未定义的行为。

您不能更改str指向的内存。如果你需要一个,你可以改变,改为这样说:

char str[] = "test";

这将为您创建字符串文字"test"的可变副本。

答案 1 :(得分:3)

更新

尝试修改字符串文字undefined behavior。如果我们查看draft C++ standard部分2.14.5 字符串文字 12 说:

  

是否所有字符串文字都是不同的(即存储在非重叠对象中)是实现定义的。尝试修改字符串文字的效果未定义。

崩溃是未定义行为的许多可能结果之一它也可能有一个似乎正常工作的程序。

或者,您可以按如下方式创建自动数组:

char str[] = "test" ;

将包含字符串文字的副本,然后您可以修改它。

原始

如果myfunc正在修改字符串文字,那么您有未定义的行为,这很容易导致程序崩溃。