• error C4996: 'std::_Copy_impl'


    以下代码段在VS2008编译可以通过,只是会提示不安全;

    std::vector<unsigned char> fileData ="asdfsfsfsfsdf";//随便打的
    //文件数据大小
    int size = fileData.size();
    //字节数组
    char* data = new char[size + 1];
    //把二进制数据复制到数组
    std::copy(fileData.begin(), fileData.end(), data);
    data[size] = 0;

    但在VS2012就不能编译通过,VS2012进行了强制类型检查

    1>C:Program FilesMicrosoft Visual Studio 11.0VCincludexutility(2176): error 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 FilesMicrosoft Visual Studio 11.0VCincludexutility(2157) : 参见“std::_Copy_impl”的声明
    1>          HashParser.cpp(43): 参见对正在编译的函数 模板 实例化“_OutIt std::copy<std::_Vector_iterator<_Myvec>,char*>(_InIt,_InIt,_OutIt)”的引用
    1>          with
    1>          [
    1>              _OutIt=char *,
    1>              _Myvec=std::_Vector_val<std::_Simple_types<unsigned char>>,
    1>              _InIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<unsigned char>>>
    1>          ]

    解决:修改代码如下

    std::vector<unsigned char> fileData = "sdfasdfasdfasf";
    	//文件数据大小
    	int size = fileData.size();
    	//字节数组
    	char* data = new char[size + 1];
    	//把二进制数据复制到数组
    	std::copy(fileData.begin(), fileData.end(), stdext::unchecked_array_iterator<char*>(data));
    	data[size] = 0;

    参考:

    http://choorucode.com/2010/08/30/visual-c-c4996-warning-on-copy-with-array-parameters/

  • 相关阅读:
    01-发送你的第一个请求
    postman使用
    java poi导出多sheet页
    base64加密解密
    Django crontab
    super().__init__()
    paramiko模块
    列表转json数据返回
    socket模块判断ip加端口的连通性
    登录拦截器
  • 原文地址:https://www.cnblogs.com/imzhstar/p/4139497.html
Copyright © 2020-2023  润新知