ana*_*ciu 1 c++ stdstring const-cast c-str
我遇到了一些代码,其中包含以下示例的几个实例:
std::string str = "This is my string";
char* ptr = const_cast<char*>(str.c_str());
ptr[5] = 'w';
ptr[6] = 'a';
Run Code Online (Sandbox Code Playgroud)
在这个简化的例子中,有一个 的赋值std::string::c_str(),它返回const char*到一个char*使用的指针const_cast。
这似乎按预期工作并相应地str进行了修改。
但std::string::c_str()在我当地图书馆的描述如下:
返回指向空终止内容的常量指针。这是内部数据的句柄。不要修改,否则可能会发生可怕的事情。
在cppreference 中,描述包括:
返回一个指向空终止字符数组的指针,该数组的数据与存储在字符串中的数据等效。
...
写入通过访问的字符数组
c_str()是未定义的行为。
在标准的[string.accessors]的descritpion是类似的,没有关于这个信息......空终止字符数组与等同于存储在所述字符串中的数据被提供。
这不是澄清问题,而是让我更加困惑,什么字符数组?它是如何等效的?是副本吗?如果是这样,为什么要修改它,还要修改原始字符串?这个实现定义了吗?
我想避免更改使用它的所有代码实例的任务,所以我的问题是:
有什么办法可以是正确的,使用ptr指针修改str字符串是否合法?