gpt4 book ai didi

c++ - boost 序列化: safe to ignore warning?

转载 作者:行者123 更新时间:2023-11-30 04:35:16 25 4
gpt4 key购买 nike

我开始使用boost的序列化代码将数据写入二进制流。我收到以下可以禁用的警告 (D_SCL_SECURE_NO_WARNINGS),但我想知道这样做是否安全?我怎样才能获得更具体的信息,我的哪些代码导致了警告?我只知道 .cpp 文件。

这是 Visual Studio 2008 的输出:

4>g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(162) : warng C4996: 'std::basic_streambuf<_Elem,_Traits>::sgetn': 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'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> E:\Visual Studio 9.0\VC\include\streambuf(121) : see declaration of 'std::basic_streambuf<_Elem,_Traits>::sgetn'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(152) : while compiling class template member function 'void boost::archive::basic_binary_iprimitive<Archive,Elem,Tr>::load_binary(void *,size_t)'
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(107) : see reference to function template instantiation 'void boost::archive::basic_binary_iprimitive<Archive,Elem,Tr>::load<T>(T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(356) : see reference to function template instantiation 'void boost::archive::load_access::load_primitive<Archive,T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(433) : see reference to function template instantiation 'void boost::archive::detail::load_non_pointer_type<Archive>::load_primitive::invoke<T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(580) : see reference to function template instantiation 'void boost::archive::detail::load_non_pointer_type<Archive>::invoke<T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/common_iarchive.hpp(68) : see reference to function template instantiation 'void boost::archive::load<Archive,T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(67) : see reference to function template instantiation 'void boost::archive::detail::common_iarchive<Archive>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive_impl.hpp(50) : see reference to function template instantiation 'void boost::archive::basic_binary_iarchive<Archive>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/interface_iarchive.hpp(61) : see reference to function template instantiation 'void boost::archive::binary_iarchive_impl<Archive,Elem,Tr>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(77) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator >><unsigned char>(T &)' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(74) : while compiling class template member function 'void boost::archive::basic_binary_iarchive<Archive>::load_override(boost::archive::version_type &,int)'
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive_impl.hpp(36) : see reference to class template instantiation 'boost::archive::basic_binary_iarchive<Archive>' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive.hpp(42) : see reference to class template instantiation 'boost::archive::binary_iarchive_impl<Archive,Elem,Tr>' being compiled
4> with
4> [
4> Archive=boost::archive::naked_binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>
4> ]
4>g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(176) : warning C4996: 'std::basic_streambuf<_Elem,_Traits>::sgetn': 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'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> E:\Visual Studio 9.0\VC\include\streambuf(121) : see declaration of 'std::basic_streambuf<_Elem,_Traits>::sgetn'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4>g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(162) : warning C4996: 'std::basic_streambuf<_Elem,_Traits>::sgetn': 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'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> E:\Visual Studio 9.0\VC\include\streambuf(121) : see declaration of 'std::basic_streambuf<_Elem,_Traits>::sgetn'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(152) : while compiling class template member function 'void boost::archive::basic_binary_iprimitive<Archive,Elem,Tr>::load_binary(void *,size_t)'
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(107) : see reference to function template instantiation 'void boost::archive::basic_binary_iprimitive<Archive,Elem,Tr>::load<T>(T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(356) : see reference to function template instantiation 'void boost::archive::load_access::load_primitive<Archive,T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(433) : see reference to function template instantiation 'void boost::archive::detail::load_non_pointer_type<Archive>::load_primitive::invoke<T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/iserializer.hpp(580) : see reference to function template instantiation 'void boost::archive::detail::load_non_pointer_type<Archive>::invoke<T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/common_iarchive.hpp(68) : see reference to function template instantiation 'void boost::archive::load<Archive,T>(Archive &,T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(67) : see reference to function template instantiation 'void boost::archive::detail::common_iarchive<Archive>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive_impl.hpp(50) : see reference to function template instantiation 'void boost::archive::basic_binary_iarchive<Archive>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/detail/interface_iarchive.hpp(61) : see reference to function template instantiation 'void boost::archive::binary_iarchive_impl<Archive,Elem,Tr>::load_override<T>(T &,int)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(77) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_iarchive<Archive>::operator >><unsigned char>(T &)' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> T=unsigned char
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/basic_binary_iarchive.hpp(74) : while compiling class template member function 'void boost::archive::basic_binary_iarchive<Archive>::load_override(boost::archive::version_type &,int)'
4> with
4> [
4> Archive=boost::archive::binary_iarchive
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive_impl.hpp(36) : see reference to class template instantiation 'boost::archive::basic_binary_iarchive<Archive>' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive
4> ]
4> g:\winlib\boost\1_42_0\boost/archive/binary_iarchive.hpp(76) : see reference to class template instantiation 'boost::archive::binary_iarchive_impl<Archive,Elem,Tr>' being compiled
4> with
4> [
4> Archive=boost::archive::binary_iarchive,
4> Elem=char,
4> Tr=std::char_traits<char>
4> ]
4>g:\winlib\boost\1_42_0\boost/archive/basic_binary_iprimitive.hpp(176) : warning C4996: 'std::basic_streambuf<_Elem,_Traits>::sgetn': 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'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]
4> E:\Visual Studio 9.0\VC\include\streambuf(121) : see declaration of 'std::basic_streambuf<_Elem,_Traits>::sgetn'
4> with
4> [
4> _Elem=char,
4> _Traits=std::char_traits<char>
4> ]

谢谢!

最佳答案

如果您相信 Boost 不会传递超出范围的参数,您可以禁用警告。

Microsoft 为 C 库提出了一组新的“更安全”的函数,

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1225.pdf

并警告所有使用旧版本的人。

您也许还可以尝试更新的 Boost 库?最新的是1.46.1

关于c++ - boost 序列化: safe to ignore warning?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5457323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com