cadena c_str () frente a datos ()

He leído en varios lugares que la diferencia entre c_str()y data()(en STL y otras implementaciones) es que c_str()siempre termina en nulo mientras data()que no. Por lo que he visto en implementaciones reales, hacen lo mismo o data()llaman c_str(). ¿Que me estoy perdiendo aqui? ¿Cuál es más...