gpt4 book ai didi

c++ 数组拷贝显示 vc++ 中的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:06 26 4
gpt4 key购买 nike

int a[4] = {10,20,30,40};
std::vector<int> vec(4);
std::copy(a, a + 4, vec.begin());

我在 vc++ 中收到以下错误,它显示警告但标记为错误我应该如何解决这个问题?

Severity Code Description Project File Line Suppression State Error C4996 std::copy::_Unchecked_iterators::_Deprecate: Call to std::copy 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' ConsoleApplication3 e:\programs\vc\include\xutility 2372

最佳答案

默认情况下,MSVC 弃用它认为不安全的某些 API。基本上,单个参数中的错误可能导致读取或写入端的缓冲区溢出的原始内存访问。

其中有 std::copy

调用已弃用的 API 会导致 MSVC 生成错误消息。

您可以根据错误提示使用 -D_SCL_SECURE_NO_WARNINGS 禁用此弃用。

This可能会解决您的问题;它涉及用“已检查的数组迭代器”包装原始指针,这意味着(至少在调试中)如果你弄错了,你会得到断言和/或异常,而不是内存损坏。

缓冲区溢出是 C/C++ 应用程序中较为普遍的错误之一;将它们视为一个严重的问题,即使它有运行时成本,除非并且直到您证明给定路径对性能至关重要。到那时,找到一种方法来静态证明您的数组大小是正确的。

关于c++ 数组拷贝显示 vc++ 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003997/

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