Какая разница между std::string:: c_str и std::string:: data?

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

Ответы

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Теперь в 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());
    }

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