Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ xutility(2227):警告C4996:&x27;标准::_Copy_impl';_C++_Boost_Warnings_Base64 - Fatal编程技术网

C++ xutility(2227):警告C4996:&x27;标准::_Copy_impl';

C++ xutility(2227):警告C4996:&x27;标准::_Copy_impl';,c++,boost,warnings,base64,C++,Boost,Warnings,Base64,我收到了这个警告信息。。但是我不知道问题出在哪里 包括 #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/trans

我收到了这个警告信息。。但是我不知道问题出在哪里

包括

#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)
#pragma警告(推送)
#杂注警告(禁用:4996)
#包括
#包括
#包括
#包括
#布拉格警告(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>          with
1>          [
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 *,6,8>>,76>
1>          ]
1>c:\program files(x86)\microsoft visual studio 10.0\vc\include\xutility(2227):警告C4996:“std::\u Copy\u impl”:带有可能不安全参数的函数调用-此调用依赖调用方检查传递的值是否正确。要禁用此警告,请使用-D_SCL_SECURE_NO_警告。有关如何使用VisualC++ ++检查迭代器的文档
1> c:\ProgramFiles(x86)\microsoft visual studio 10.0\vc\include\xutility(2212):Siehe Deklation von'std::_Copy\u impl'
1> c:\users\perlig\documents\visualstudio 2010\projects\restmanager\restmanager\**http.cpp(257)**:Siehe Verweis auf die instancezierung der gerade Kompilerten Funktions模板“\u OutIt std::copy(\u InIt,\u InIt,\u OutIt)”。
1> 与
1>          [
1> \u OutIt=boost::archive::iterators::ostream\u iterator,
1> Base=boost::archive::iterators::base64_from_binary,
1> N=76,
1> Elem=char,
1> \u InIt=boost::archive::迭代器::插入\u换行符
1>          ]
代码出现在第257行,如警告消息所示。但我无法修复它,因为我不知道出了什么问题

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

http.cpp(257):

//typdef,准备
使用名称空间boost::archive::迭代器;
斯特林戈斯;
类型定义
插入换行符
> 
,76
> 
base64_text;//将上述所有操作组合到一个新的迭代器中
//加密
#pragma警告(推送)
#杂注警告(禁用:4996)

复制(//我想您知道警告的含义,但首先我描述了警告,然后说了如何消除它。Microsoft在其CRT、STL、MFC等中实现了一组新的启用安全功能的函数,并将这些函数的旧版本标记为已弃用,以提示您应迁移到新的安全版本。s它说std::copy不安全!!怎么做?如下所示:

char storage[ 10 ], *p = storage;
std::copy( std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), p );
char存储[10],*p=存储;
std::copy(std::istream_迭代器(std::cin),std::istream_迭代器(),p);
现在,如果用户输入超过10 int,会发生什么?内存将被覆盖,您的内存将被破坏

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

现在,您应该通过
-D\u SCL\u SECURE\u NO\u WARNINGS
cl
输入标志来禁用此警告,或者添加
pragma
来禁用此警告(就像您所做的那样),但为什么pragma不起作用


原因很明显,这个pragma在作用域上工作,并且你在它上面使用pragma的作用域没有任何错误,你必须用这个pragma保护
xutility
,一切都会按预期工作。

它不应该是
auto stuff=base64_text(data.c_str());copy(stuff,stuff+stuff\u size,ostream\u迭代器(os))
?您是否直接包括
xutility
?什么是“自动填充”?不,我不包括xutility,但
xutility
来自
c:\程序文件(x86)\Microsoft Visual Studio 12.0\VC\include\xutility.cc
,是否仍可以修改内容并使用
pragma
进行保护?@athos您只需添加
#pragma警告(禁用:4996)
围绕您的
#include
,这是最终引入
xutility.h
。或者在您自己的项目中尝试其他可能引入xutility的include。
char storage[ 10 ], *p = storage;
std::copy( std::istream_iterator<int>(std::cin), std::istream_iterator<int>(), p );