c – xutility(2227):warning C4996:’std :: _ Copy_impl’

c – xutility(2227):warning C4996:’std :: _ Copy_impl’,第1张

概述我得到这个警告信息..但我不知道什么/在哪里的问题是.. 包括 #pragma warning(push)#pragma warning(disable:4996) #include <boost/archive/iterators/base64_from_binary.hpp>#include <boost/archive/iterators/insert_linebreaks.hpp> 我得到这个警告信息..但我不知道什么/在哪里的问题是..

包括

#pragma warning(push)#pragma warning(disable:4996) #include <boost/archive/iterators/base64_from_binary.hpp>#include <boost/archive/iterators/insert_linebreaks.hpp>#include <boost/archive/iterators/transform_wIDth.hpp>#include <boost/archive/iterators/ostream_iterator.hpp>#pragma warning(pop)

和警告

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2227): warning C4996: 'std::_copy_impl': 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>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2212): SIEhe Deklaration von 'std::_copy_impl'1>          c:\users\perlig\documents\visual studio 2010\projects\restmanager\restmanager\**http.cpp(257)**: SIEhe Verweis auf dIE InstanziIErung der gerade kompilIErten Funktions-template "_OutIt std::copy<boost::archive::iterators::insert_linebreaks<Base,N>,boost::archive::iterators::ostream_iterator<Elem>>(_InIt,_InIt,_OutIt)".1>          with1>          [1>              _OutIt=boost::archive::iterators::ostream_iterator<char>,1>              Base=boost::archive::iterators::base64_from_binary<boost::archive::iterators::transform_wIDth<const char *,6,8>>,1>              N=76,1>              Elem=char,1>                _InIt=boost::archive::iterators::insert_linebreaks<boost::archive::iterators::base64_from_binary<boost::archive::iterators::transform_wIDth<const char *,76>1>          ]

代码发生在第257行,因为警告消息说.但我无法解决它,因为我不知道是什么错误..

字符串数据包含通过http的基本身份验证的“用户:密码”字符串.

http.cpp(257):

// typdef,prepareusing namespace boost::archive::iterators;stringstream os;typedef     insert_linebreaks<         // insert line breaks every 72 characters        base64_from_binary<    // convert binary values ot base64 characters            transform_wIDth<   // retrIEve 6 bit integers from a sequence of 8 bit bytes                const char *,8            >        >,76    >     base64_text; // compose all the above operations in to a new iterator// encrypt#pragma warning(push)#pragma warning(disable:4996)copy( //<<<<<------ liNE 257    base64_text(data.c_str()),base64_text(data.c_str() + data.size()),boost::archive::iterators::ostream_iterator<char>(os));#pragma warning(pop)

有人有什么想法吗?

解决方法 我想你知道警告的意思是什么,但首先我会描述警告,然后说出如何去做. Microsoft在其CRT,STL,MFC …中实现了新的安全启用功能集,并将旧版本的这些功能标记为不推荐使用,为您提供一个提示,您应该迁移到新的安全版本.所以说std :: copy是不安全的!怎么样?如下:
char storage[ 10 ],*p = storage;std::copy( std::istream_iterator<int>(std::cin),std::istream_iterator<int>(),p );

现在如果用户输入10多个int会发生什么?内存将被覆盖,您的内存损坏.

使用boost :: archive :: iterators :: ostream_iterator是完全安全的,但是由于它不遵循MSVC中安全迭代器的设计,所以它将被视为不安全的.

现在你应该禁用-D_SCL_SECURE_NO_WARNINGS的这个警告来cl输入标志,或添加一个pragma来禁用这个警告(就像你这样做),但为什么pragma不工作?

原因很明显,这个编写工作的范围和范围,你使用pragma对它没有任何错误,你必须保护透明度与这个pragma,每件事情都将按预期工作.

总结

以上是内存溢出为你收集整理的c – xutility(2227):warning C4996:’std :: _ Copy_impl’全部内容,希望文章能够帮你解决c – xutility(2227):warning C4996:’std :: _ Copy_impl’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249314.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存