strcat
ожидает нулевое окончание char*
, поэтому, присваивая адрес локального char
, вы вызываете неопределенное поведение .
Кроме того, new char[std::strlen(str) + 1]
не инициализирует массив до 0
s, что означает, что cstr
также не будет должным образом завершаться нулем; добавление ()
к new[]
приводит к инициализации массива.
Попробуйте вместо этого:
#include <cstddef>
#include <cctype>
#include <cstring>
#include <ostream>
#include <iostream>
int main()
{
char const* str = "TEST";
char c[2] = { };
char* cstr = new char[std::strlen(str) + 1]();
std::size_t i = 0;
while (str[i])
{
c[0] = static_cast<char>(std::tolower(str[i++]));
std::strcat(cstr, c);
}
std::cout << cstr << std::endl;
delete [] cstr;
}