У меня есть такой протобуф
message Proto{
string Data = 1;
}
и я использую его вот так
Proto prot;
const s8* szData = prot.data().c_str();
меня смущает то, что когда я устанавливаю данные, кажется, что содержимое в szData нето же самое с prot.data (), и после некоторого теста я обнаружил, что адрес prot.data изменяется
, например, следующий код:
// original
cout << static_cast<const void *>(szData) << ":"
<< static_cast<const void *>(prot.data().c_str()) << endl;
// set for the first time
prot.set_data("11");
cout << static_cast<const void *>(szData) << ":"
<< static_cast<const void *>(prot.data().c_str()) << endl;
// set for the second time
prot.set_data("12");
cout << static_cast<const void *>(szData) << ":"
<< static_cast<const void *>(prot.data().c_str()) << endl;
выдаст что-то вроде этого:
0x63ef618:0x63ef618
0x63ef618:0x63ef318
0x63ef618:0x63ef618
szData также может быть наполнен каким-то бессмысленным контентом. Может ли кто-нибудь так любезно объяснить это мне?