Во-первых, код, указанный ниже.
#include<string>
#include<stdio.h>
int main(){
const char *cs;
{
std::string s("123456");
cs = s.c_str();
printf("cs = %s\n",cs);
}
printf("cs = %s\n",cs);
return 0;
}
запустите его и получите следующий результат. (линукс gcc)
cs = 123456
cs = 123456
Итак, я не знаю, почему указатель cs действителен после уничтожения s. другими словами, время жизни указателя, указывающего на функцию c_str в std::string.