GetTypeName は std::string で、次のコード
printf("%#x\n", proto->GetTypeName().c_str());
printf("%s\n", proto->GetTypeName().c_str());
const char *res = proto->GetTypeName().c_str();
printf("%#x\n",res);
printf("%s\n",res);
次の出力が生成されます。
0x90ef78
ValidTypeName
0x90ef78
ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■ю■←ЬЬQщZ
アドレスは常に同じです。次のコード(行は交換です)
const char *res = proto->GetTypeName().c_str();
printf("%#x\n",res);
printf("%s\n",res);
printf("%#x\n", proto->GetTypeName().c_str());
printf("%s\n", proto->GetTypeName().c_str());
この出力を生成すると、アドレスは常に異なります。
0x57ef78
Y
0x580850
ValidTypeName
私は何を間違っていますか?
strlen(res)
無効なサイズを返すため、strcpy もできません。