我收到此警告,但所有功能都正常工作.
这究竟意味着什么?
'strcpy': This function or variable may be unsafe.
Consider using strcpy_s instead. To disable deprecation,
use _CRT_SECURE_NO_WARNINGS. See online help for details.
Run Code Online (Sandbox Code Playgroud)
Cra*_*lus 21
由于没有边界检查并且可能导致缓冲区溢出,因此该函数(strcpy)被认为是不安全的.(实际上strcpy对于溢出漏洞是臭名昭着的,并且所有程序员都避免它 - 或者至少应该避免它).建议是使用安全函数,该函数考虑目标缓冲区的大小以避免溢出.你也可以使用strncpy(但要小心!).您的代码没有问题,即函数将按照您的说法运行,但尝试将大于目标缓冲区的缓冲区作为输入.该函数将溢出目标缓冲区.检查这个链接文本
Mon*_*ier 11
虽然strcpy是一个常见的字符串函数,但它有一个历史,它是软件中许多错误和安全漏洞的来源(由于缓冲区溢出很容易).
为了在C和C++中促进更安全的编码,Microsoft为危险的字符串方法提供了一套替换函数.通常,它们的原始名称后跟_s.因此,strcpy的Microsoft安全版本是警告中建议的strcpy_s.请注意这是Microsoft特有的功能,它不是普遍存在的.
你有几个选择.
我通常做#3.
Kon*_*lph 10
由于您正在编写C++,因此正确的解决方案是尽可能禁止char*代码中的C风格字符串,并用std::string(或其他适当的字符串类型)替换它们.
千万不能使用的功能,如strcpy或strcpy_s或strncpy.使用类的复制构造函数或赋值运算符string.或者,如果您确实需要复制缓冲区,请使用std::copy.