#include <iostream>
#include <string.h>
using namespace std;
char* strcat_m(const char *str_dest,const char *str_src) {
static char *new_str = nullptr;
if (new_str){
printf("~~del: %d \n",size_t(new_str));
delete[] new_str;
}
new_str= new char[strlen(str_dest)+strlen(str_src)+1];
printf("~~new: %d \n",size_t(new_str));
strcpy(new_str,"");
strcat(new_str,str_dest);
strcat(new_str,str_src);
return new_str;
};
int main()
{
printf(strcat_m("123"," 213123\n"));
printf(strcat_m("A "," B\n"));
const char* rew=strcat_m("asd"," asd\n");
//Но если написать delete[] rew, то программа вылетает при следующем вызове strcat_m
rew=strcat_m("+++ ","--- \n");
printf(rew);
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjaGFyKiBzdHJjYXRfbShjb25zdCBjaGFyICpzdHJfZGVzdCxjb25zdCBjaGFyICpzdHJfc3JjKSB7CiAgIHN0YXRpYyBjaGFyICpuZXdfc3RyID0gbnVsbHB0cjsKICAgaWYgKG5ld19zdHIpewogICAgICBwcmludGYoIn5+ZGVsOiAlZCBcbiIsc2l6ZV90KG5ld19zdHIpKTsKICAgICAgZGVsZXRlW10gbmV3X3N0cjsKICAgfQoKICAgbmV3X3N0cj0gbmV3IGNoYXJbc3RybGVuKHN0cl9kZXN0KStzdHJsZW4oc3RyX3NyYykrMV07CiAgIHByaW50Zigifn5uZXc6ICVkIFxuIixzaXplX3QobmV3X3N0cikpOwogICBzdHJjcHkobmV3X3N0ciwiIik7CiAgIHN0cmNhdChuZXdfc3RyLHN0cl9kZXN0KTsKICAgc3RyY2F0KG5ld19zdHIsc3RyX3NyYyk7CiAgIHJldHVybiBuZXdfc3RyOwp9OwoKaW50IG1haW4oKQp7CiAgIHByaW50ZihzdHJjYXRfbSgiMTIzIiwiICAyMTMxMjNcbiIpKTsKICAgcHJpbnRmKHN0cmNhdF9tKCJBICAiLCIgIEJcbiIpKTsKICAgY29uc3QgY2hhciogcmV3PXN0cmNhdF9tKCJhc2QiLCIgYXNkXG4iKTsKICAgLy/QndC+INC10YHQu9C4INC90LDQv9C40YHQsNGC0YwgZGVsZXRlW10gcmV3LCDRgtC+INC/0YDQvtCz0YDQsNC80LzQsCDQstGL0LvQtdGC0LDQtdGCINC/0YDQuCDRgdC70LXQtNGD0Y7RidC10Lwg0LLRi9C30L7QstC1IHN0cmNhdF9tCiAgIHJldz1zdHJjYXRfbSgiKysrICIsIi0tLSBcbiIpOwogICBwcmludGYocmV3KTsKfQo=