我正在修改接受 const char* 并使用函数 ProcessString 的函数。 ProcessString 是一个函数,它需要一个以 null 结尾的字符缓冲区作为 char*。缓冲区中的字符可能会修改,也可能不会修改,如下面的函数签名所定义。为了“弥合差距”,我使用了一个临时的 std::string:
void ProcessString( char* str );
void SomeFunction( const char* str )
{
string temp(str);
ProcessString( &temp[0] );
}
我的主要问题是关于 std::string::operator[] 的保证以及上面 &temp[0] 返回的地址是否是一个可用的、以 null 结尾的缓冲区作为 char*。其次,非常第二,有没有更好的方法来做到这一点?
我正在使用 C++03。
最佳答案
这仅在 C++11 中具有明确定义的行为;在以前的标准中,std::string
不保证其内部缓冲区的连续存储。
然而,虽然该代码在 C++11 中完全没问题,但更惯用的方法是使用 std:vector<char>
,自 C++03 以来保证连续存储:
void ProcessString(char* str);
void SomeFunction(char const* str)
{
// + 1 for terminating NUL
std::vector<char> temp(str, str + std::strlen(str) + 1);
ProcessString(&temp[0]); // or temp.data() in C++11
}
关于c++ - std::string::operator[] 的结果地址是否指向一个可写的、以 nul 结尾的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9728450/