C/C++

Может ли в С++ произойти переполнение строки как например переполнение инта? То есть может ли обычный стринг не уместить

Если строка представляет из себя массив символов (char[]), то да. Попытка записи по индексу, выходящему за пределы границ такого массива (т. е. за длину строки), изменит значение байта, не принадлежащего этой строке, ввиду того, что массив по сути своей является указателем на первый свой элемент, из-за чего к нему применимы все свойства указателей, что и есть переполнение.
Евгений Сарпов
Евгений Сарпов
354
Лучший ответ
Если вы имеете ввиду стандартный поток ввода в среде Windows, то вполне может. Буфер под входящую строку консоли Windows ограничен размером в 8 КБ или 8192 байта. Таким образом в однобайтовой кодировке вы можете ввести только 8191 символ, ещё один требуется под 0-терминатор. Если же вы используете два байта под каждый символ, то отведённый размер вам придётся делить пополам. Таким образом ваша строка сократится до 4095 символов. Всё что не сможет войти будет обрезано. Такое поведение не зависит от типа данных. Это свойство консоли cmd.exe

Ограничения на статический массив типа char[] ещё строже. Это связано с тем, что программный стек ограничен 2 МБ и может произойти так, что под массив в стеке не хватит места. Например, такой код, который содержит большой массив строк
 #pragma once 
int main() {
char text[2048][1024]{};
}
гарантированно приведёт к ошибке времени выполнения stack overflow

https://learn.microsoft.com/ru-ru/troubleshoot/windows-client/shell-experience/command-line-string-limitation
Сергей Цой
Сергей Цой
84 214
Илья Захаринский Тогда уж следует добавить, что слишком длинные строки совсем необязательно распределять в стеке. Их можно сделать глобальными или статическими, что, впрочем, в большинстве случаев тоже плохо, а лучше всего - динамическими (с помощью функции malloc в си или оператора new в си++), и тогда ваши строки будут ограничены только общим объёмом памяти или ограничениями для прямой адресации в некоторых архитектурах.
Может, если в оперативной памяти не хватит места под строку.
Kaxa ........
Kaxa ........
51 417
Оба ответа выше верные, поэтому повторяться не буду. Спрошу только: при чём тут переполнение int? При переполнении int просто обнулится, и больше ничего не произойдёт.
Сергей Бондаренко при переполнении наше число просто не впихнется в int, так как int не вмещает такие размеры, аналогично я спрашивал и про строки