V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Torii
V2EX  ›  问与答

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

  •  
  •   Torii · 2017-04-06 17:50:52 +08:00 · 1237 次点击
    这是一个创建于 2797 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在自学 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
    zhanglintc
        1
    zhanglintc  
       2017-04-07 00:56:30 +08:00 via iPhone
    1. 不是写了让你考虑使用 strcpy_s 吗?

    2. 字符串在这里就是指针。
    jasonlz
        2
    jasonlz  
       2017-04-07 09:08:04 +08:00
    VC++高版本编译器会报这个错误,你的教程可能是针对标准 C++编写的,用 strcpy_s 代替,或者在文件头加上 #define _CRT_SECURE_NO_WARNINGS 。 VC++的某些特性和标准 C++是有不少区别的,遇到了记住就行,不然就换*nix 系统用 gcc 或者 clang 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:13 · PVG 23:13 · LAX 07:13 · JFK 10:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.