次の様な 3DS 形式で保存するコード.
データ部分が空の時,アプリケーションエラー.
bool save_3DS (FILE* ofp,const tDS_Chunk& chnk) { if (ofp == NULL) { return false ; } { u_16 id = chnk.GetID() ; u_32 len = chnk.GetLen() ; v_u__8 data= chnk.GetData() ; ::fwrite(&id, 1, sizeof(u_16), ofp) ; ::fwrite(&len, 1, sizeof(u_32), ofp) ; ::fwrite(&data[0], data.size(), sizeof(u__8), ofp) ; } for (size_t index=0 ; index<size_t(chnk.GetChildCount()) ; index++) { tDS_Chunk child = chnk.GetChild(long(index)) ; bool result = ::save_3DS(ofp,child) ; if (!result) { return false ; } } return true ; }
::fwrite(&data[0], data.size(),sizeof(u__8), ofp) ; がうまくない.
次の様な感じでコードを修正.
if (data.size() > 0) { ::fwrite(&data[0], data.size(), sizeof(u__8), ofp) ; }
VC 6 や VC 14 では,たまたまだと思うがエラーにならなかった.