std::string str;
  :
const char* p = str.c_str();

strが変更や破棄されない限り、pが指す先が有効である事は保証されているのでしょうか?
localtimeの様にバッファを共有していて、別オブジェクトのc_str()呼び出しで
内容が変わったりする実装があったりするんでしょうか?