当程序看到不影响程序运行的整数溢出时,我应该怎么做?

时间:2011-02-06 08:16:53

标签: c integer-overflow

有一个小程序在提示符下从用户那里获取输入。它需要用户的预定义输入并执行它们。

它还会显示一个数字,提示指示命令的计数:

myprompt 1) usercommand1
...
myprompt 2) usercommand2
...
...
myprompt 3)

我不希望用户一次提供超过65535个命令,因此count存储为unsigned short数据。

问题:

当用户实际超过命令数量限制时,我不确定程序应如何处理。我应该让计数翻到0(并保持循环)还是保持在65535?

我希望程序仍然正常运行,就像接受用户输入并像以前一样处理它们一样。此外,count的值对命令执行完全没有影响。

3 个答案:

答案 0 :(得分:3)

我看起来你正在解决一个可能永远不会发生的问题。

让我们假设您的用户非常快,输入命令行需要10秒钟。翻滚将在655350秒后发生,即大约七天半

让柜台翻身。如果这仍然让您感到麻烦,那么请走高路并将其设为unsigned long。然后它只会在1361年年后滚动(在32位机器上)。

答案 1 :(得分:2)

如果你问自己这个问题,这意味着你应该采取简单的方法:使计数器成为unsigned int

如何处理限制非常依赖于此计数器的用途。我的感觉是,它不是用于任何真正有趣的事情所以你的问题有点没有实际意义。无论你做出哪个选择,它仍然可以正常工作。

另一方面,如果这个计数器作为某些真实的使用,你应该向这个计数器的用户询问正确的方法:两者都有一些优点和缺点(计数器要么及时返回,要么停止)所以你的用户可能会感到惊讶。

您忘了提及其他选择:终止您的计划。或者删除限制并使用某种形式的大整数(例如GMP lib),但这种方法有点过分。

请注意,DNS选择将序列号环绕在2 ^ 32。这使它永远可用。计数器的用户应该检测溢出。 RFC 1982

答案 2 :(得分:1)

说实话:

  

我希望程序仍能正常运行   通常,如同用户输入和   像以前一样处理它们。而且,   count的值根本没有影响   命令执行。

回答你自己的问题,如果它根本没有效果,那就让它再次从0开始。