Я предполагаю, что string
в вашем коде C ++ - std::string
.
str1 + str2
создает временный объект std::string
. Вы вызываете на нем метод c_str()
и получаете строковый указатель в стиле C на данные этого временного std::string
объекта.
Когда временный std::string
выходит за пределы области видимости и уничтожается, указатель стиля cstr
raw C остается висящим, указывая на недопустимую память.
Если вам нужно работать с объединенной строкой str1 + str2
, я бы предложил вы безопасно храните его в объекте non -Contemporary std::string
, например:
std::string s = str1 + str2;
// Work with s
if (s.length() < 15) {
// Use s here
...
}
Обратите внимание, что я вызвал метод std::string::length()
вместо C function strlen()
. Вы также можете использовать метод std::string::size()
.
Как правило, в коде C ++ следует использовать удобную строку classes (например, std::string
) вместо C - стиль указателей на необработанные строки.