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


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

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

3 15

3 ответа:

C_str () гарантирует нулевое завершение. data () этого не делает.

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

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

Используйте c_str (), если код, который вы используете, предполагает, что строка завершается NUL (например, любая функция, написанная для обработки строк 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());
    }
Таким образом, они возвращают то же самое.