【问题标题】:Taking values through input and diplaying them during run time通过输入获取值并在运行时显示它们
【发布时间】:2011-12-11 10:37:36
【问题描述】:

我需要编写一个程序,在运行期间,一组任意大小的整数将作为输入。它们将被空白分隔。最后,给出一个新行,显示输入的结束。如何将它们保存到整数数组中,以便稍后显示它们。我认为这有点困难,因为在编译过程中不知道要输入的值的数量

【问题讨论】:

    标签: c arrays pointers input


    【解决方案1】:

    听起来像家庭作业。

    如果我错了,请纠正我,我会给你更多的提示。

    您可以声明一个非常大的数组,该数组可能不会被用户输入填充,然后使用 scanf 或类似的东西来抓取整数,直到您点击“\n”,或者您可以抓取每个整数一次,使用 malloc 和 memcpy 调用的组合来分配内存。第一个选项永远不应该在现实世界的问题中使用,我当然不提倡这种做法,即使你的教科书可能告诉你这样做。

    在 K&R 中有一个类似的例子。

    这是您在 C 语言中会遇到的典型问题。解决方案通常是两个选项之一。

    1. 使用一个足够大的数组来容纳输入。有时,当数据可能非常大时,这是一个糟糕的选择。当您将视频帧或大型文本文件保存到数组时,这是一个坏主意的一个例子。这也使您在旧版本的 Windows 中面临缓冲区溢出攻击。但是,对于较小的(家庭作业)程序,这有时是一个很好的快速破解解决方案,您可以指望用户(即您的教授没有试图破坏您的程序)不输入 1000 个字符。通常这被认为是不好的做法,出于我之前提到的安全原因,请考虑我的第二个选项。

    2. 使用动态数组(即 malloc)。这可能是您的教授希望您做的,因为这听起来像是学生第一次学习指针和数组时使用的典型问题。这是一个很好的方法,只要记住在你完成后调用你的内存。这里棘手的部分是你仍然必须提前知道你想要的数组的大小(当然不是在编译时)。

    【讨论】:

    • “不可能由用户输入填充”,直到有一次在那个关键任务的高安全性应用程序中......除了希望上帝之外,还有安全(r)功能和其他解决方案用户不会让你感到惊讶。
    • @peachykeen。我们不是在谈论关键任务的高安全性应用程序,而是在谈论家庭作业问题。程序员有很多次这样做。我无法告诉你我读了多少次: char buffer[1000]; memset(缓冲区, '\0', 1000);在接受用户输入之前,在其他(知名)程序中。
    • 当然你可以,人们也有,但在这种情况下,它不会在 NASA 运行,但是绝对没有任何理由来延续这种做法。在现实生活中对它的不当使用导致了一整类错误(缓冲区溢出),其中一些已经对现实世界的安全产生了影响。
    • 忽略他死去的部分,仍然没有理由教坏做法(书上比比皆是,尤其是像这样在有限范围内起作用的做法)。这也是一个真正需要消除的问题,因为 ti 可能会导致真正的问题。
    • 同意,但压力很大,你永远不会在现实生活中这样做,然后立即学习如何正确管理内存。即使在这种情况下,使用更安全的函数版本也是一个好主意。
    猜你喜欢
    • 2013-12-09
    • 1970-01-01
    • 2011-12-20
    • 2017-12-06
    • 2019-08-19
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多