2010-02-22 258 views
0

字符串中允许的最大字符数是多少?如果是这样,字符数量的限制是多少?字符串中的最大字符数

+4

高依赖执行。如果您需要准确的答案,请指定您的操作系统,编译器和STL实现。 – 2010-02-22 13:13:05

+1

听起来像功课吗? – 2010-02-22 15:58:58

回答

-2

假设你正在谈论一个字符数组(而不是像std :: string之类的东西),那么我相信极限是32768,这取决于编译器。

UPDATE:
char str[32768];

宣布对数组时,此限制不适用:
正如已经pionted给我看,这个限制在声明堆栈,像这样在一个磁盘阵列仅适用堆是这样的:
char *str = new char[32769];

+2

-1:为什么会有这么小的最大值? – 2010-02-22 13:09:01

+0

我记得试图声明一个比这更大的字符数组(在VC++ 6中,所以这是几年前),我记得极限是数组中的32768个元素。 – Cameron 2010-02-22 13:12:56

+0

如果您使用语法“char myArray [32768]”分配数组,则将它分配到堆栈中。你的字符串受限于你使用的平台的堆栈大小。但是,将这样的大型结构放在堆栈上是一个坏主意。如果你把“char * myArray = new char [32768]”,你会发现你的数组可能会像你想要的那样大,在你的平台上整数大小的范围内。 – Ant 2010-02-22 13:30:28

3

我们谈论“C字符串”或std::string ...前者完全取决于你的缓冲区的大小。后者应该仅受可用内存量的限制。

+1

如何取决于缓冲区的大小是一个问题。当字符串很大时,std :: string不会将实际字符串存储在堆栈中。 – 2010-02-22 13:12:17

+0

nobugz:我不太明白你的意思,你的第一句话是关于std :: string还是一个普通的缓冲区? – Skurmedel 2010-02-22 13:15:21

+1

std :: string的存储将永远不受堆栈大小的限制。 – 2010-02-22 13:23:17

6

对于std::string str,您可以获得最大尺寸为str.max_size()

要获取当前分配的大小,请使用str.capacity()

+0

有趣......我想max_size就像它用于索引或其他东西的整数的最大值? – Skurmedel 2010-02-22 13:11:34

+2

max_size返回size_t,它是无符号整数,但它可能会更少,具体取决于实现我猜。有一个关于length_error异常的问题http://stackoverflow.com/questions/1183700/what-is-the-meaning-of-this-c-error-stdlength-error – 2010-02-22 13:15:20

+2

请注意,'max_size'是任何STL容器。同样在大多数计算机上,您不受限于整数限制,而是受限于一次可以分配的内存块的最大大小(如果我的内存服务于我,则每个进程的Windows不支持超过2GB)以及您的内存已经留在机器上了。 – 2010-02-22 14:59:56

1

我的理解是,C风格字符串中的最大字符数是size_t类型的容量。该标准定义了size_t,以便能够处理给定平台上的最大尺寸。可能存在较小的限制,例如可用于存储文本的内存(可以是只读或可写)。

根据std::string(C++字符串),极限值由std::string::size_type类型可以容纳的最大值指定。这在平台和翻译人员中有所不同。同样,这个数量可能会被平台存储字符串的能力降低。

一些新手已经能够声明10 MB字符串来处理文件。