免責事項: これは初心者向けの別のタスクであるため、異なるコンパイラや異なるアーキテクチャでは、結果として異なる (互換性のない) バイナリが得られる可能性があるという事実を理解しています。したがって、この特定のマシンでのみ機能することは問題ありません。
size_t
私はバイナリファイルから読み書きしています。書き込みは次のようになります。
std::string result;
result.append((char *)&block_size_, sizeof(block_size_));
その後すぐにresult
ファイルに書き込まれます。
しかし、同じように読むと:
map_binary.copy((char *)&block_size_, sizeof(block_size_), offset);
警告が表示されます
warning C4996: 'std::basic_string<_Elem,_Traits,_Alloc>::copy': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstring(1777) : see declaration of 'std::basic_string<_Elem,_Traits,_Alloc>::copy'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Alloc=std::allocator<char>
1> ]
このコードが安全でない理由がわかりません。問題がまったくないふりをする以外の解決策を探しています (を使用-D_SCL_SECURE_NO_WARNINGS
)。
それで、私は何が欠けていますか?
PS: 現在、私は標準ライブラリのみを使用して C++ を学習しているため、boost
またはその他のものを使用するソリューションは受け入れられません。