typedef struct { char opn_type; char file[10]; : } S38OPFBK; S38OPFBK m_S38OPFBK; : memcpy(memcpy(&m_S38OPFBK, &buff4[10], sizeof(S38OPFBK));
などのように typedef で定義されている変数に
memcpy で変数 buff などをコピーすると typedef の要素の値が
おかしくなってしまったようなことはないだろうか ?
これは CRTBNDC のコンパイラーのバグというかミスであり
コンパイラーは typedef を見つけると typedef の各要素どうしの
あいだに 1桁のスペースを挿入してしまう問題を持っている。
そのためバッファー全体を typedef に上書きでコピーすると
各要素の値が期待したものとは異なってしまうのである。
これに気づかないと相当、頭を抱えてしまうことになるのだが
幸い、解決方法はある。
#pragma pack(1) 〜 #pragma pack(reset) で typedef を囲んで
次のように定義するとよい。
#pragma pack(1) typedef struct { char opn_type; char file[10]; : } S38OPFBK; S38OPFBK m_S38OPFBK; #pragma pack(reset)
… これによってコンパイラーが typedef のあいだにスペースを
挟むバグはなくなる。
このことは IBM マニュアルには明示されていないかも知れない。