@Peter87: to clarify, I think you mean that there has to be a null terminator in memory after the end of the string? This has always been the guarantee for .c_str() but not for .data(), could you link to somewhere explaining this difference or quote the standard?
Returns: A pointer p such that p + i == &operator[](i) for each i in [0,size()].
Complexity: constant time.
Requires: The program shall not alter any of the values stored in the character array.