当前位置:  开发笔记 > 编程语言 > 正文

编译器错误:带有可能不安全的参数的函数调用

如何解决《编译器错误:带有可能不安全的参数的函数调用》经验,为你挑选了2个好方法。

得到了一些不是我的代码并且它产生了这个警告atm:

iehtmlwin.cpp(264) : warning C4996: 'std::basic_string<_Elem,_Traits,_Ax>::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'
        with
        [
            _Elem=char,
            _Traits=std::char_traits,
            _Ax=std::allocator
        ]
        c:\program files (x86)\microsoft visual studio 8\vc\include\xstring(1680) : see declaration of 'std::basic_string<_Elem,_Traits,_Ax>::copy'
        with
        [
            _Elem=char,
            _Traits=std::char_traits,
            _Ax=std::allocator
        ]

这是有问题的代码:

HRESULT STDMETHODCALLTYPE Read(void __RPC_FAR *pv, ULONG cb, ULONG __RPC_FAR *pcbRead)
    {
        if (prepend.size() > 0)
        {
            int n = min(prepend.size(), cb);
            prepend.copy((char *) pv, n);
            prepend = prepend.substr(n);
            if (pcbRead)
                *pcbRead = n;

            return S_OK;
        };

        int rc = Read((char *) pv, cb);
        if (pcbRead)
            *pcbRead = rc;

        return S_OK;
    };

并且警告指的是prepend.copy行.我试过谷歌搜索警告,但无法弄清楚它是什么.有人可以帮我解决这个问题.

Visual Studio 2005 SP1 Windows 7 RC1

.

编辑:prepend是一个typedefed的字符串

typedef basic_string, allocator > string;

Alex Martell.. 12

警告告诉你,如果n太大,你就冒着缓冲区溢出的风险- 你知道这不会发生,因为你用a计算的方式min,但可怜的commpiler没有.我建议你采用编译器自己的建议和use -D_SCL_SECURE_NO_WARNINGS这个源文件......



1> Alex Martell..:

警告告诉你,如果n太大,你就冒着缓冲区溢出的风险- 你知道这不会发生,因为你用a计算的方式min,但可怜的commpiler没有.我建议你采用编译器自己的建议和use -D_SCL_SECURE_NO_WARNINGS这个源文件......


我最终使用#pragma warning(disable:4996),因为预处理器定义没有用

2> JaredPar..:

查看此MSDN页面以获取有关警告的文档

http://msdn.microsoft.com/en-us/library/ttcz0bys.aspx

MS C++编译器决定弃用std :: string :: copy方法,因为它可能不安全使用并可能导致缓冲区溢出.此弃用是Microsoft特定的,您可能不会在其他编译器平台上看到它.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有