2011-10-20 64 views
1

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

回答

0

听起来像作业。

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

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

只是有这样的以K & R.

一个例子这是你将不得不在C的解决方案通常是两个选项之一的一个典型问题。

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

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

+0

在一个关键任务的高安全性应用程序“不会可以通过对用户输入装”直到有一次......有安全的(R)功能与其它解决方案相比希望神灵用户不会让你感到惊讶。 – ssube

+0

@peachykeen。我们并不是在谈论关键任务高安全性应用程序,而是在谈论一个作业问题。程序员有很多次这样做。我不能告诉你我读了多少次:char buffer [1000]; memset(buffer,'\ 0',1000);在其他(众所周知的)程序之前进行用户输入。 –

+1

当然,在这种情况下,你可以和人们都有,而且它不会在美国航空航天局运行,但是绝对没有任何理由使这种做法永久化。它在现实生活中的不良使用导致了整个类别的错误(缓冲区溢出),其中一些错误具有实际的安全隐患。 – ssube

相关问题