C++初学者求问关于 error c4996

2017-04-06 17:50:52 +08:00
 Torii
在自学 C++上遇到的问题。
下面是书本上的代码,我直接抄下来运行报错。
#include <iostream>
using namespace std;

class MyString
{
private:
char* Buffer;

public:
MyString(const char* InitialInput)
{
if(InitialInput!=NULL)
{
Buffer=new char [strlen(InitialInput)+1];
strcpy(Buffer,InitialInput);
}
else
Buffer=NULL;
}
~MyString()
{
cout<<"Invoking destructor,clearing up"<<endl;
if(Buffer!=NULL)
delete[] Buffer;
}

int GetLength()
{
return strlen(Buffer);
}

const char* GetString()
{
return Buffer;
}
};

int mian()
{
MyString SayHello("Hello from String Class");
cout<<"String buffer in MyString is "<<SayHello.GetLength();
cout<<"characters long"<<endl;

cout<<"Buffer constains: ";
cout<<"Buffer constains: "<<SayHello.GetString()<<endl;


}

书本上写出的运行结果应当是:
String buffer in MyString is 23 characters long
Buffer contains:Hello from String Class
Invoking destructor,clearing up

编译器上运行报错如下:
error C4996: '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.

请问这是什么原因,另外这个函数本身我也有一些看不明白的部分如下:
类 MyString 的构造函数的参数应该是指针,在创建对象 SayHello 时给却是字符串?
主函数 int main ()应该有一个整数的返回值,这里没有是否代表可以省略掉?

经过多次检查确认无摘抄错误。
不太经常使用论坛,排版非常糟糕请见谅。
1223 次点击
所在节点    问与答
2 条回复
zhanglintc
2017-04-07 00:56:30 +08:00
1. 不是写了让你考虑使用 strcpy_s 吗?

2. 字符串在这里就是指针。
jasonlz
2017-04-07 09:08:04 +08:00
VC++高版本编译器会报这个错误,你的教程可能是针对标准 C++编写的,用 strcpy_s 代替,或者在文件头加上 #define _CRT_SECURE_NO_WARNINGS 。 VC++的某些特性和标准 C++是有不少区别的,遇到了记住就行,不然就换*nix 系统用 gcc 或者 clang 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/353002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX