Максимальная длина строкового литерала?

Я пытаюсь создать длинный строковый литерал, который храню внутри std :: string. Если я создаю литерал длиной до 2600 символов, все печатается нормально. Если я выйду за пределы этого количества символов, я получу только несколько случайных символов мусора.

Я использовал стандарт C в качестве руководства, экологические ограничения указаны как "4095 символов в строковом литерале (после объединения) ", Но код написан на C ++.

Поэтому мой вопрос: каково минимальное количество символов в строковом литерале C ++?

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

 8bitwide29 окт. 2012 г., 17:28
@aschepler, этот вопрос о std :: string, первом предложении.
 Praetorian29 окт. 2012 г., 17:23
Можете ли вы вывести строку на консоль вместо элемента управления RichEdit?
 Paul Groke02 февр. 2015 г., 20:51
@Mark Ransom: отладчик (MSVC) обрезает строки для отображения до довольно короткого максимума, намного меньше, чем WinAPI...A функции смогут справиться. Я бы предложил использоватьstrlen() определить длину литерала и затем утверждать, что последние несколько символов имеют ожидаемое значение.
 Mark Ransom29 окт. 2012 г., 17:21
Поскольку Windows будет преобразовывать однобайтовую строку в Unicode, у нее действительно может быть свой собственный предел, независимый от C ++. Попробуйте посмотреть на строку в отладчике.
 aschepler29 окт. 2012 г., 17:19
Связанный вопрос оstd::string, не строковые литералы.
 Lundin29 окт. 2012 г., 22:25
@ 8bitwide Да, но строковые литералы хранятся в памяти, прежде чем помещаются в std :: string, поэтому ограничения std :: string не имеют значения.
 Lundin29 окт. 2012 г., 22:19
@aschepler Действительно, мне бесполезно, если я могу уместить один миллиард символов в std :: string, если он инициализируется из константного строкового литерала с более узким пределом. "возможно дублирование не отвечает на мой вопрос ни в малейшей степени. Я'Отметим это для внимания модератора.

Ответы на вопрос(1)

Решение Вопроса

Приложение Б

Количество реализации [подразумевается]

Символы в строковом литерале (после конкатенации) [65 536].

Но обратите внимание, что:

1) Поскольку компьютеры конечны, реализации C ++ неизбежно ограничены в размерах программ, которые они могут успешно обрабатывать.Каждая реализация должна документировать те ограничения, где они известны. Эта документация может ссылаться на фиксированные ограничения там, где они существуют, например, как вычислять переменные ограничения в зависимости от доступных ресурсов, или говорить, что фиксированные ограничения не существуют или неизвестны.



2) Пределы могут ограничивать количества, которые включают те, которые описаны ниже или другие. Число в скобках после каждого количества рекомендуется как минимальное для этого количества. Тем не мение,эти величины являются лишь ориентировочными и не определяют соответствие, (акцент мой)

Ваша реализация должна предоставить вам этот номер, хотя.

 Joseph Mansfield29 окт. 2012 г., 17:43
Делает ли это какую-либо программу, которая использует что-либо ограниченное реализацией этих ограничений, определенной?
 Joseph Mansfield29 окт. 2012 г., 18:31
А, Приложение B помечено как "познавательный", что в соответствии с директивами ISO / IEC означает, что это ненормативный документ. Ограничения упоминаются только в Приложении B, поэтому, если речь идет об авторе программы, эти ограничения не существуют.
 Luchian Grigore29 окт. 2012 г., 17:44
@sftrabbit Я думаю, что эта часть в целом определяется реализацией.
 Lundin29 окт. 2012 г., 22:23
Спасибо, это отвечает на мой вопрос (в отличие от "возможно дублирование). Я уже проверил документы компилятора, но они почти бесполезны для этого конкретного компилятора (Embarcadero C ++ Builder). Я'Я начну поручение поддержки с ними, я думаю.

Ваш ответ на вопрос