The char array returned by string.c_str() is nul terminated. If tinyXML's function takes a not nul terminated char* buffer, then your probably gonna get some unexpected behaviour.
const char* c_str ( ) const;
Get C string equivalent
Generates a null-terminated sequence
of characters (c-string) with the same
content as the string object and
returns it as a pointer to an array of
characters.
A terminating null character is
automatically appended.
No, it does not need to be released. String's destructor does that for you.
The returned array points to an
internal location with the required
storage space for this sequence of
characters plus its terminating
null-character, but the values in this
array should not be modified in the
program and are only granted to remain
unchanged until the next call to a
non-constant member function of the
string object.
source: http://www.cplusplus.com/reference/string/string/c_str/