关于C ++:将const char *转换为char *崩溃

Casting const char* to char* crashes

当我尝试将const char*强制转换为char*时,它崩溃:

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

我怎样才能做到这一点?


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

您不允许更改str指向的内存。 如果您需要一个可以更改的内容,请改为这样声明:

1
char str[] ="test";

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


更新资料

尝试修改字符串文字是未定义的行为。 如果我们看一下C ++标准草案的2.14.5字符串文字,第12段会说:

Whether all string literals are distinct (that is, are stored in nonoverlapping objects) is implementation defined. The effect of attempting to modify a string literal is undefined.

崩溃是未定义行为的许多可能结果之一,也可能有一个看起来正常运行的程序。

或者,您可以创建一个自动数组,如下所示:

1
char str[] ="test" ;

其中将包含字符串文字的副本,您可以随后对其进行修改。

原版的

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