#include <iostream>
#include <string.h>
using namespace std;
char m_szVal1[100] = {0};
char m_szVal2[100] = {0};
char* Sum() {
char szTmp[200];
strcpy(szTmp, m_szVal1);
strcat(szTmp, m_szVal2);
return szTmp;
}
void test() {
char* const p=Sum();//вот тут мы получили этот абсолютно неверный указатель
//но его сразу нужно забрать, а не потом когда-нибудь
if (NULL == p)
throw "Идите в *опу"; //т.е. если указатель не валидный, дальше вообще никаких переговоров
//или сразу его забираем себе
const std::string wowPtr(p);//все - забрали указатель
cout << "wowPtr=" << wowPtr;
}
int main() {
memset(m_szVal1, '1', 99);
memset(m_szVal2, '2', 99);
test();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjaGFyIG1fc3pWYWwxWzEwMF0gPSB7MH07CmNoYXIgbV9zelZhbDJbMTAwXSA9IHswfTsKCmNoYXIqIFN1bSgpIHsKCWNoYXIgc3pUbXBbMjAwXTsKCXN0cmNweShzelRtcCwgbV9zelZhbDEpOwoJc3RyY2F0KHN6VG1wLCBtX3N6VmFsMik7CglyZXR1cm4gc3pUbXA7Cn0KCnZvaWQgdGVzdCgpIHsKCWNoYXIqIGNvbnN0IHA9U3VtKCk7Ly/QstC+0YIg0YLRg9GCINC80Ysg0L/QvtC70YPRh9C40LvQuCDRjdGC0L7RgiDQsNCx0YHQvtC70Y7RgtC90L4g0L3QtdCy0LXRgNC90YvQuSDRg9C60LDQt9Cw0YLQtdC70YwKCQoJLy/QvdC+INC10LPQviDRgdGA0LDQt9GDINC90YPQttC90L4g0LfQsNCx0YDQsNGC0YwsINCwINC90LUg0L/QvtGC0L7QvCDQutC+0LPQtNCwLdC90LjQsdGD0LTRjAoJaWYgKE5VTEwgPT0gcCkKCSAgICB0aHJvdyAi0JjQtNC40YLQtSDQsiAq0L7Qv9GDIjsgLy/Rgi7QtS4g0LXRgdC70Lgg0YPQutCw0LfQsNGC0LXQu9GMINC90LUg0LLQsNC70LjQtNC90YvQuSwg0LTQsNC70YzRiNC1INCy0L7QvtCx0YnQtSDQvdC40LrQsNC60LjRhSDQv9C10YDQtdCz0L7QstC+0YDQvtCyCgkKCS8v0LjQu9C4INGB0YDQsNC30YMg0LXQs9C+INC30LDQsdC40YDQsNC10Lwg0YHQtdCx0LUKCWNvbnN0IHN0ZDo6c3RyaW5nIHdvd1B0cihwKTsvL9Cy0YHQtSAtINC30LDQsdGA0LDQu9C4INGD0LrQsNC30LDRgtC10LvRjAkKCQoJY291dCA8PCAid293UHRyPSIgPDwgd293UHRyOwp9CgppbnQgbWFpbigpIHsKCW1lbXNldChtX3N6VmFsMSwgJzEnLCA5OSk7CgltZW1zZXQobV9zelZhbDIsICcyJywgOTkpOwoJdGVzdCgpOwp9Cg==