我对以下代码感到困惑:
string _str = "SDFDFSD";
char* pStr = (char*)_str.data();
for (int i = 0; i < iSize; i++)
pStr[i] = ::tolower(pStr[i]);
here _str.data()
回报const char*
。但我们将它分配给char*
。我的问题是,
_str.data()
返回指向常量数据的指针。如何将其存储在指向数据的指针中?数据是恒定的吧?如果我们将它分配给 char 指针,那么我们可以像在 for 语句中所做的那样更改它,这对于常量数据来说是不可能的。
不要那样做。在这种情况下可能没问题,但作为文档data()
says:
返回的指针可能会因进一步调用其他指针而失效
修改对象的成员函数。
程序不得改变该序列中的任何字符。
因此,如果保留该指针,您可能会非常意外地写入无效内存。或者,事实上,破坏了 std::string 的实现。我几乎可以说这个函数不应该被公开。
std::string 提供了一个非常量operator[]
为了这个目的。
string _str = "SDFDFSD";
for (int i = 0; i < iSize; i++)
_str[i] = ::tolower(_str[i]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)