Недавно у нас была лекция в колледже, где наш профессор рассказал нам о разных вещах, чтобы быть осторожным при программировании на разных языках. Ниже приведен пример в С++:
std::string myFunction()
{
return "it me!!";
}
int main(int argc, const char * argv[])
{
const char* tempString = myFunction().c_str();
char myNewString[100] = "Who is it?? - ";
strcat(myNewString, tempString);
printf("The string: %s", myNewString);
return 0;
}
Идея, почему это приведет к ошибке, заключается в том, что return "it me!!"
неявно вызывает конструктор std::string с char []. Эта строка возвращается из функции, а функция c_str()
возвращает указатель на данные из std::string
.
Поскольку строка, возвращаемая из функции, не упоминается нигде, она должна быть немедленно освобождена. Это была теория.
Однако запуск этого кода без проблем. Было бы интересно узнать, что вы думаете. Спасибо!