私はいくつかの研究を行いましたが、明確な承認または不承認を見つけることはできません。直列化は簡単で、エラーが発生しにくい方法で表現することができるように、私が欲しいもの可変長データとゼロ長配列のバイナリシリアル化は安全ですか?
は、固定サイズの構造+可変長部分です。
struct serialized_data
{
int len;
int type;
char variable_length_text[0];
};
そして:MSVC、GCC、打ち鳴らすなどあれば
serialize_data buff = (serialize_data*)malloc(sizeof(serialize_data)+5);
buff->len=5;
buff->type=1;
memcpy(buff->variable_length_text, "abcd", 5);
残念ながら私は見つけることができない、それにOKです。
たぶん同じことを達成するためのより良い方法はありますか?
は、私は本当にすべての周りの人々の醜いキャストをしたくない:このプログラムは、長さ0の配列を使用している
memcpy((char*)(((char*)buffer)+sizeof(serialize_data)), "abcd", 5);
の一例です。 – ildjarn
言語を選択してください。 C++やCに興味がありますか? –
おそらくこの記事が役に立ちます。可搬性の質問に答えていないが、このパターンhttp://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – JaredPar