这是一个创建于 2786 天前的主题,其中的信息可能已经有所发展或是发生改变。
在自学 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 ()应该有一个整数的返回值,这里没有是否代表可以省略掉?
经过多次检查确认无摘抄错误。
不太经常使用论坛,排版非常糟糕请见谅。
2 条回复 • 2017-04-07 09:08:04 +08:00
|
|
1
zhanglintc 2017-04-07 00:56:30 +08:00 via iPhone
1. 不是写了让你考虑使用 strcpy_s 吗?
2. 字符串在这里就是指针。
|
|
|
2
jasonlz 2017-04-07 09:08:04 +08:00
VC++高版本编译器会报这个错误,你的教程可能是针对标准 C++编写的,用 strcpy_s 代替,或者在文件头加上 #define _CRT_SECURE_NO_WARNINGS 。 VC++的某些特性和标准 C++是有不少区别的,遇到了记住就行,不然就换*nix 系统用 gcc 或者 clang 。
|