【问题标题】:Casting const char* to char* crashes将 const char* 转换为 char* 崩溃
【发布时间】:2013-04-07 19:42:26
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

标签: c++ casting string-literals


【解决方案1】:

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

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

char str[] = "test";

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

【讨论】:

    【解决方案2】:

    更新

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

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

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

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

    char str[] = "test" ;
    

    其中会有一个字符串文字的副本,然后您可以对其进行修改。

    原创

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多