【问题标题】:Is gets() considered a C function or a C++ function?gets() 被认为是 C 函数还是 C++ 函数?
【发布时间】:2012-01-08 20:27:00
【问题描述】:
#include <iostream>
using namespace std;

void main(){
    char name[20];
    gets(name);
    cout<<name<<endl;
}

我在 google 中找不到答案,函数 gets() 是 C 还是 C++ 语言函数?因为在大学里我必须只使用 C++ 函数。

【问题讨论】:

  • 来自其手册页:“永远不要使用gets()。因为事先不知道数据是不可能知道gets() 将读取多少个字符,并且因为gets() 将继续存储字符超过缓冲区的末尾,使用它非常危险。它已被用来破坏计算机安全性。请改用 fgets()。和“C89、C99、POSIX.1-2001。LSB 不推荐使用 gets()。POSIX.1-2008 删除了 gets() 的规范”

标签: c++ c gets


【解决方案1】:

C 函数是 c++ 函数的子集,但不,您可能不希望在 c++ 项目中使用 gets()

您可以考虑将getline()operator&gt;&gt; 用于流。他们在大学里没有告诉你任何事情吗?

【讨论】:

    【解决方案2】:

    gets() 是一个可追溯到 1960 年代的 C 函数,它不进行边界检查并且被认为是危险的,多年来一直保留它以保持兼容性,仅此而已。

    您的有效且推荐的 C++ 代码应为:

    #include <iostream>
    using namespace std;
    
    int main(){
        // C style NULL terminated string NOT the same as a C++ string datatype 
        //char name[20];
        string name;// C++ string datatype, meant to use with C++ functions and features
        cin >> name;
        cout<<name<<endl;
        return 0;
    }
    

    您应该避免将 C 特定功能与 C++ 功能混合作为字符串数据类型/对象。有两种方法可以同时使用,但作为初学者,你应该坚持其中一种。

    我的个人建议,先学 C,然后过渡到 C++。大多数 C++ 程序员都不擅长纯 C,C 语言排在第一位,并被用作 C++ 的基础环境,但随着时间的推移,两者都以你可以想象的更多方式分开。

    因此,除非您同时使用 C++ 学习面向对象,否则您将要做的就是使用 C++ 编译器在 C 中编写代码。与 C 相比,C++ 也非常庞大。模板和面向对象的编程工具是首先使用 C++ 的原因。

    Pure C 仍然适用于许多事情,小巧而优雅。精通 C 比精通 C++ 更容易。 C++ 已经发展到可以管理的程度,而无需坚持任何开发团队同意的功能子集。

    【讨论】:

    • 注意,getscin &gt;&gt; 做不同的事情;当您尝试读取一个双字字符串时,您会注意到不同之处。 getline(cin, name) 相当于得到一整行。
    【解决方案3】:

    gets 是一个 c 函数

    您可能正在寻找 istream/ostream/fstream 等。

    例如:http://www.cplusplus.com/reference/iostream/istream/read/

    【讨论】:

      【解决方案4】:

      gets 是一个 c 函数,First link on google for gets。 您可能应该查看 iostream 、 fstream 等中的函数

      【讨论】:

        【解决方案5】:

        此示例无法编译,因为获取的标头是 cstdlib 及其 c 函数。

        【讨论】:

          猜你喜欢
          • 2014-04-20
          • 1970-01-01
          • 1970-01-01
          • 2017-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-08
          • 2016-04-22
          相关资源
          最近更新 更多