В чем разница между std::string::C str и std::string::data? [дубликат]

этот вопрос уже есть ответ здесь:

зачем мне вообще звонить std::string::data() над std::string::c_str()? Несомненно, в безумии "Стандард" есть какой-то метод...

3 ответов


c_str () гарантирует нулевое завершение. data () - нет.


c_str () возвращает указатель на данные с добавленным байтом NUL, поэтому вы можете использовать возвращаемое значение в качестве "строки C".

Data() возвращает указатель на данные, без каких-либо изменений.

используйте c_str (), если код, который вы используете, предполагает, что строка равна нулю (например, любая функция, написанная для обработки строк C).


теперь в MS STL 10.0, похоже, нет никакой разницы, поскольку я вижу это в заголовке:

...\Microsoft Visual Studio 10.0\VC\include\xstring

const _Elem *c_str() const
    {   // return pointer to null-terminated nonmutable array
    return (_Myptr());
    }

const _Elem *data() const
    {   // return pointer to nonmutable array
    return (c_str());
    }

Так они возвращают то же самое.