Я пишу класс строки, который похож на std :: string для домашнего задания, но я не могу понять, как вернуть c-строку, которая не вызывает утечку памяти, и гарантированно останется неизменной до тех пор, пока она не будет больше не используется. В настоящее время у меня есть:Как std :: string :: c_str() возвращает c-строку, которая не вызывает утечку памяти или неопределенное содержимое c-строки?
const char* string::c_str()
{
char c[_size+1];
strncpy(c,_data,_size);
c[_size]='\0';
return c;
}
, но содержимое переопределяется вскоре после его вызова. Если я выполняю динамическое распределение, у меня будет либо утечка памяти, либо только одна c-строка может существовать из заданной строки в любое время. Как я могу избежать этого?
«* или только одна c-строка может существовать из заданной строки в любое время *« Так работает 'std :: string' - в чем проблема? – ildjarn
Если 'strncpy()' является ответом, вы, вероятно, [задаете неправильный вопрос] (http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not- безопасней-strcpy.html). –
Я не понимал, что он должен существовать только до тех пор, пока не изменится. Теперь он работает в O (1) раз. –