string c_str () vs. dados ()

Eu li vários lugares que a diferença entre c_str()e data()(em STL e outras implementações) é que c_str()é sempre terminado em nulo, enquanto data()não é. Pelo que tenho visto em implementações reais, eles fazem o mesmo ou data()chamam c_str(). O que estou perdendo aqui? Qual é o mais correto para...