Kai*_*ged 2 c++ stl operators stdstring c++03
我正在修改一个接受const char*并使用函数ProcessString的函数.ProcessString是一个函数,它期望以null结尾的字符缓冲区作为char*.缓冲区中的字符可能会也可能不会被修改,如下面的函数签名所定义.为了"弥合差距",我使用临时的std :: string:
void ProcessString( char* str );
void SomeFunction( const char* str )
{
string temp(str);
ProcessString( &temp[0] );
}
Run Code Online (Sandbox Code Playgroud)
我的主要问题是关于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
}
Run Code Online (Sandbox Code Playgroud)