将const char*返回char*然后更改数据

Tah*_*lil 3 c++ pointers stdstring

我对以下代码感到困惑:

string _str = "SDFDFSD";
char* pStr = (char*)_str.data();
for (int i = 0; i < iSize; i++)
    pStr[i] = ::tolower(pStr[i]);
Run Code Online (Sandbox Code Playgroud)

这里_str.data()回来了const char*.但是我们将它分配给一个char*.我的问题是,

_str.data()返回指向常量数据的指针.如何将它存储在指向数据的指针中?数据是不变的吗?如果我们将它分配给char指针而不是像我们在for语句中那样改变它,这对于常量数据是不可能的.

Sal*_*gar 5

不要那样做.在这种情况下可能没问题,但正如文档所述data():

通过进一步调用修改对象的其他成员函数,可以使返回的指针无效.

程序不得更改此序列中的任何字符.

因此,如果你保持指针,你可能会非常意外地写入无效内存.或者,实际上,破坏了std :: string的实现.我几乎可以说不应该暴露这个功能.

std :: string operator[]为此提供了非const .

string _str = "SDFDFSD";
for (int i = 0; i < iSize; i++)
    _str[i] = ::tolower(_str[i]);
Run Code Online (Sandbox Code Playgroud)