#include <iostream>
#include <string>
#include <cstring>
#include <cstdint>
using namespace std;
struct Test {
char* s;
Test(const string str)
: s(new char[strlen(str.c_str()) + 1])
{ strcpy(s, str.c_str()); }
};
int main()
{
const string ms = "st";
Test t(ms);
char* p = t.s;
//преобразование указателья на содержащий указатель на строку "string"?
char *pt = reinterpret_cast<char*>(&t);
for (size_t i = 0; i < ms.size(); ++i)
cout << "original = " << uintptr_t(t.s + i) << endl;
for (size_t i = 0; i < ms.size(); ++i) {
*pt = 'x' + i; // UB?
cout << "modified = " << uintptr_t(t.s) << endl;
//std::cout << t.s << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGNzdGRpbnQ+CnVzaW5nICBuYW1lc3BhY2Ugc3RkOwogCnN0cnVjdCBUZXN0IHsKICAgIGNoYXIqIHM7CiAgICBUZXN0KGNvbnN0IHN0cmluZyBzdHIpCiAgICAgICAgOiBzKG5ldyBjaGFyW3N0cmxlbihzdHIuY19zdHIoKSkgKyAxXSkKICAgIHsgc3RyY3B5KHMsIHN0ci5jX3N0cigpKTsgfQp9OwogCmludCBtYWluKCkKeyAgICAgIAogICAgY29uc3Qgc3RyaW5nIG1zID0gInN0IjsgCiAgICBUZXN0IHQobXMpOyAgCiAgICBjaGFyKiBwID0gdC5zOyAKICAgIC8v0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQtSDRg9C60LDQt9Cw0YLQtdC70YzRjyDQvdCwINGB0L7QtNC10YDQttCw0YnQuNC5INGD0LrQsNC30LDRgtC10LvRjCDQvdCwINGB0YLRgNC+0LrRgyAic3RyaW5nIj8KICAgIGNoYXIgKnB0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJnQpOyAgICAgCiAKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbXMuc2l6ZSgpOyArK2kpCiAgICAJY291dCA8PCAib3JpZ2luYWwgPSAiIDw8IHVpbnRwdHJfdCh0LnMgKyBpKSA8PCBlbmRsOwogCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1zLnNpemUoKTsgKytpKSB7CiAgICAgICAgKnB0ID0gJ3gnICsgaTsgICAvLyBVQj8KICAgICAgICBjb3V0IDw8ICJtb2RpZmllZCA9ICIgPDwgdWludHB0cl90KHQucykgPDwgZW5kbDsKICAgICAgICAvL3N0ZDo6Y291dCA8PCB0LnMgPDwgZW5kbDsKICAgIH0KIAogICAgcmV0dXJuIDA7Cn0=