の C++リファレンスにc_str()
はstd::string
、次のように表示されます。
戻り値
基礎となる文字ストレージへのポインター。
data()[i] == operator[](i) for every i in [0, size())
(C++11未満)
data() + i == &operator[](i) for every i in [0, size()]
(C++11以上)
C++ 11以降、範囲が1要素増えることを除いて、2つの違いはわかりません。
前者の主張data()[i] == operator[](i)
は後者にも当てはまるのではないか。