Ответ 1
c_str() гарантирует завершение NUL. data() не делает.
Зачем мне когда-либо хотеть называть std::string::data()
над std::string::c_str()
? Конечно, здесь есть какой-то метод стандартного безумия...
c_str() гарантирует завершение NUL. data() не делает.
c_str() возвращает указатель на данные с добавленным байтом NUL, поэтому вы можете использовать возвращаемое значение как строку "C".
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());
}
Таким образом, они возвращают то же самое.