データストリームは固定幅メッセージで構成されており、各メッセージには固定幅フィールドも完全に定義されているため、データストリームを構造体にキャストしようとしています。構造体を作成し、reinterpret_cast を使用してデータストリームへのポインターを構造体にキャストし、フィールドを取得することを計画していました。テスト コードを作成したところ、奇妙な結果が得られました。なぜ私がこれらを取得しているのか、またはコードを修正する方法を説明できますか? (データストリームはバイナリと英数字が混在していますが、文字列でテストしているだけです)
#pragma pack(push,1)
struct Header
{
char msgType[1];
char filler[1];
char third[1];
char fourth[1];
};
#pragma pack(pop)
int main(void)
{
cout << sizeof(Header) << endl;
char* data = "four";
Header* header = reinterpret_cast<Header*>(data);
cout << header->msgType << endl;
cout << header ->filler << endl;
cout << header->third << endl;
cout << header->fourth << endl;
return 0;
}
出てきた結果は
4
four
our
ur
r
nullターミネータが見つからないため、ourとurの4つが印刷されていると思います。null ターミネータの問題を回避するにはどうすればよいですか?