2

当我试图投射const char*char*它崩溃时:

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

我怎样才能做到这一点?

4

2 回答 2

4

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

不允许更改 指向的内存str。如果你需要一个你可以改变的,用这种方式声明它:

char str[] = "test";

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

于 2013-04-15T15:52:00.527 回答
3

更新

试图修改字符串文字未定义的行为。如果我们查看草案 C++ 标准部分2.14.5 字符串文字12段说:

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

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

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

char str[] = "test" ;

它将具有字符串文字的副本,然后您可以对其进行修改。

原来的

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

于 2013-04-15T15:52:10.087 回答