Iva*_*nov 4 c++ visual-studio-2012
所以我有这个代码:
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
Run Code Online (Sandbox Code Playgroud)
...
char* b = new char [10];
strcpy(b, "1234567890");
Run Code Online (Sandbox Code Playgroud)
错误:microsoft visual studio 11.0\vc\include\string.h(110):查看'strcpy'的声明
我如何解决它?
Eat*_*oes 15
快速解决方法是将_CRT_SECURE_NO_WARNINGS定义添加到项目的设置中
右键单击C++并选择"属性"项以转到属性窗口.
现在按照并扩展到"配置属性" - >"C/C++" - >"预处理器" - >"预处理器定义".
在"预处理器定义"中添加
_CRT_SECURE_NO_WARNINGS
但添加是个好主意
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
至于继承预定义的定义
恕我直言,这是一个很好的方法.
Joh*_*0te 11
在MSDN上有一个解释和解决方案:
函数strcpy被认为是不安全的,因为没有边界检查并且可能导致缓冲区溢出.
因此,正如它在错误描述中所建议的那样,您可以使用strcpy_s而不是strcpy:
strcpy_s(char*strDestination,size_t numberOfElements,
const char*strSource);
和:
要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
http://social.msdn.microsoft.com/Forums/da-DK/vcgeneral/thread/c7489eef-b391-4faa-bf77-b824e9e8f7d2
您收到的消息是 MS 的建议,他们建议您不要使用标准的 strcpy 函数。他们这样做的动机是很容易以不好的方式误用(并且编译器通常无法检测并警告您这种误用)。在您的帖子中,您正是这样做的。你可以通过告诉编译器不要给你那个建议来摆脱这个消息。但是,代码中的严重错误仍然存在。
您正在创建一个可容纳 10 个字符的缓冲区。然后您将 11 个字符塞入其中。(还记得结尾的 '\0' 吗?)你拿了一个刚好足够容纳 10 个鸡蛋的盒子,并试图把 11 个鸡蛋塞进去。这对你有什么好处?不这样做是你的责任,编译器通常不会检测到这样的事情。
您已标记此 C++ 并包含字符串。我不知道你使用 strcpy 的动机,但如果你使用 std::string 而不是 C 风格的字符串,你会得到扩展以容纳你在其中的内容的框。
| 归档时间: |
|
| 查看次数: |
92190 次 |
| 最近记录: |