2010-02-22 3 views
0

Максимальное количество символов, допустимых в строке? Если да, то каков предел количества символов?Максимальное количество символов в строке

+4

Очень зависимая реализация. Укажите операционную систему, компилятор и реализацию STL, если вы хотите получить точный ответ. –

+1

Звучит как домашнее задание? –

ответ

-2

Предполагая, что вы говорите о массиве символов (и не что-то вроде std :: string), то я считаю, что предел равен 32768, в зависимости от компилятора.

UPDATE:
Как было pionted ко мне, это ограничение применяется только при объявлении массива в стеке, как так:
char str[32768];

Это ограничение не применяется при объявлении массива на кучи, как это:
char *str = new char[32769];

+2

-1: Почему такой крошечный максимум? –

+0

Я помню, как пытался объявить массив символов больше, чем этот раз (в VC++ 6, так что это было несколько лет назад), и я помню, что предел составляет 32768 элементов в массиве. – Cameron

+0

Если вы выделяли массив, используя синтаксис «char myArray [32768]», вы выделяли его в стеке. Ваша строка была ограничена размером стека платформы, которую вы использовали. Однако размещение таких больших структур в стеке - плохая идея. Если вы поместите «char * myArray = new char [32768]», вы обнаружили, что ваш массив может быть таким большим, каким вы хотели, чтобы он находился в пределах размера целого числа на вашей платформе. – Ant

3

мы говорим «C строка» или std::string ... бывший целиком и полностью зависит от размера вашего буфера. Последнее должно ограничиваться только объемом доступной памяти.

+1

Насколько это зависит от размера буфера - вопрос. std :: string не сохраняет фактическую строку в стеке, когда строка является большой. –

+0

nobugz: Я не совсем понимаю, что вы имеете в виду, это ваше первое предложение о std :: string или регулярном буфере? – Skurmedel

+1

Хранилище для std :: string никогда не будет ограничено размером стека. – 2010-02-22 13:23:17

6

std::string str максимальный размер str.max_size().

Для получения в настоящее время выделенного размера используйте str.capacity().

+0

Интересно ... Я предполагаю, что max_size как максимум целого числа, которое он использует для индексирования или чего-то еще? – Skurmedel

+2

max_size возвращает size_t, который является целым числом без знака, но это может быть меньше в зависимости от реализации. Существует вопрос SO о исключении length_error http://stackoverflow.com/questions/1183700/what-is-the-meaning-of-this-c-error-stdlength-error –

+2

Обратите внимание, что 'max_size' является общим для любого STL контейнер. Также на большинстве компьютеров вы ограничены не целым числом, а максимальным размером блока памяти, который может быть выделен сразу (окна не поддерживают более 2 ГБ на каждый процесс, если моя память мне подходит), а память «Остался на машине. –

1

Я понимаю, что максимальное количество символов в строке стиля C - это емкость типа size_t. size_t определяется стандартом, чтобы иметь возможность обрабатывать наибольший размер на данной платформе. Там могут быть меньше ограничений, таких как доступная память для хранения текста (как для чтения, так и для записи).

Что касается std::string (строка C++), предел определяется максимальным значением, которое может вместить тип std::string::size_type. Это варьируется между платформами и переводчиками. Опять же, эта величина может быть уменьшена возможностями платформы для хранения строки.

Некоторые новички смогли объявить строки 10 МБ для обработки файлов.

Смежные вопросы