#define HUGE_NUMBER ???
char string[HUGE_NUMBER];
do_something_with_the_string(string);
我想知道在不冒任何潜在内存问题、缓冲区溢出等风险的情况下,我可以添加到 char 数组中的最大数量是多少。我希望获得用户的输入,并且可能是尽可能多的输入。
请参阅 Jack Klein 的回复(请参阅原帖 http://bytes.com/topic/c/answers/218557-array-size-limits):
原始 C 标准 (ANSI 1989/ISO
1990)要求编译器
成功翻译至少一篇
程序至少包含一个
一组环境的例子
限制。这些限制之一是
能够创建至少一个对象
32,767 字节。
这一最低限额在
1999 年 C 标准更新为
至少 65,535 字节。
不需要 C 实现
提供大于该值的对象
大小,这意味着他们不需要
允许更大的整数数组
比(int)(65535 / sizeof(int))。
从非常实际的角度来说,在现代
电脑,不能说
预先确定数组可以有多大
创建的。它可能取决于诸如
物理内存量
安装在计算机中,数量
操作系统提供的虚拟内存,
其他任务、驱动程序的数量,
以及已经运行的程序以及如何
正在使用的内存太多。所以你的
程序可能能够使用更多或
今天运行的内存比它少
昨天可以用或者可以
明天用。
许多平台都制定了最严格的规定
自动对象的限制,即
那些在函数内部定义的
不使用“静态”
关键词。在某些平台上您可以
创建更大的数组(如果有)
静态或动态分配。
现在,为了提供一个稍微更有针对性的答案,不要声明巨大的数组以避免缓冲区溢出。这接近人们能想到的 C 语言中最糟糕的做法。相反,花一些时间编写好的代码,并仔细确保不会发生缓冲区溢出。另外,如果您事先不知道数组的大小,请查看malloc
,它可能会派上用场:P
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)