С Новым годом! Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640

Что будет в такой ситуации?

22.07.2017, 20:29. Показов 855. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure Test(var a : string);
begin
    a := 'Здесь больше 30 символов. А его это вообще волнует? Похоже...';
    Writeln(a);
end;
 
var
    str : string[30];
    
begin
    str := '3d';
    str := 'Здесь больше 30 символов. А его это вообще волнует? Похоже...'; // Тут не влазит
    Writeln(str);
    Test(str); //Влезло?
    Writeln(str); //Но почему?
end.
Вывод
Здесь больше 30 с
Здесь больше 30 символов. А его это вообще волнует? Похоже...
Здесь больше 30 символов. А его это вообще волнует? Похоже...
Он расширяет строку? Как это вообще работает?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.07.2017, 20:29
Ответы с готовыми решениями:

Правильным ли будет такой выход из ситуации?
Собственно, будет ли нарушением из какого либо принципа ООП такая вещь? Конструктор родительского вызывается раньше конструктора...

Подскажите или в такой ситуации будет работать сервер
Скажите если интернет подключение имеет постоянный айпи адрес, а сервер с сайтом находится как указаном на рисунке sxema.jpg, возможно...

Подскажите или в такой ситуации будет работать сервер
Скажите если интернет подключение имеет постоянный айпи адрес, а сервер с сайтом находится как указано на рисунке, возможно обратится к...

9
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,343
22.07.2017, 21:22
версия компилятора, опции?

у меня вот так получается:
Миниатюры
Что будет в такой ситуации?  
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
23.07.2017, 12:52
А у меня выводит ненадолго 30 символов
Здесь больше 30 символов. А ег
а потом вылетает с ошибкой 253.
0
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
24.07.2017, 20:59  [ТС]
Наверное, настройки разные.
0
 Аватар для vlisp
1062 / 983 / 153
Регистрация: 10.08.2015
Сообщений: 5,336
25.07.2017, 10:05
Цитата Сообщение от Luke0208 Посмотреть сообщение
А его это вообще волнует?
Ты задекларировал str как массив символов длиной 30 штук. Компилятор зарезервировал место под 30 символов, а ты передаешь в массив больше, чем он может сохранить. поэтому компилятор тебя предупреждает... Так как string по умолчанию считается AnsiString, то компилятор тебе выдал ошибку и даже если ты настроеишь компилятор
Тип String может означать ShortString или AnsiString, в зависимости от опции {$H}. Когда опция выключена ({$H-}), String означает ShortString (короткая строка). Если не указано иное, её размер 255 символов. Когда опция включена ({$H+}), String без указания длины означает AnsiString, в противном случае -- ShortString заданной длины. В режиме {$mode DelphiUnicode} String означает UnicodeString.
То передав в масссив больше, чем надо, получишь ошибку по той же причине.
По-моему, вполне адекватное поведение
0
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
25.07.2017, 18:26  [ТС]
Проблема в том что я не получил ошибку. Она компилится, и работает.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
29.07.2017, 20:31
{$R+} тоже стоит?
0
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
07.08.2017, 23:19  [ТС]
{$R+} стоит.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure Test(var a : string);
begin
    a := 'Здесь больше 30 символов. А его это вообще волнует? Похоже...';
end;
 
var
    str : string[30];
    
begin
    str := 'Здесь больше 30 символов. А его это вообще волнует? Похоже...'; // Все нормально, обрезает.
    Writeln(str);
    Test(str);
    Writeln(str); // А тут уже в str влезло. Переполнением буфера не грозит?
end.
Вывод:
Здесь больше 30 с
Здесь больше 30 символов. А его это вообще волнует? Похоже...

Добавлено через 5 минут
Или тут по принципу С? Передача по ссылке передает указатель на первый символ(элемент массива, он там вроде кол-во символов), а тип объявлен как string, то внутри процедуры ошибок не будет. Все таки при стечении обстоятельств это может сломать программу?

Добавлено через 15 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure Test(var a : string);
begin
    a := 'Здесь больше 30 символов. А его это вообще волнует? Похоже...';
end;
 
var
    str : string[30];
    bla2, bla, bla3 : string;
    
begin
    bla2 := '213213123';
    str := 'Здесь больше 30 символов. А его это вообще волнует? Похоже..asdasdadasdasdasdasdasd.'; // Тут не влазит
    bla :=  '21321312';
    bla3:= '2321312';
    Writeln(str);
    Test(str); 
    Writeln(str);
    Writeln(bla);
    Writeln(bla3);
    Writeln(bla2);
end.
Значение bla сломано) Вот и ответ. Наверное, я не правильно описал свою проблему.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
08.08.2017, 05:57
Цитата Сообщение от Luke0208 Посмотреть сообщение
{$R+} стоит.
у меня с ошибкой вылетает при компиляции:
Миниатюры
Что будет в такой ситуации?  
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
08.08.2017, 06:18
правда, в режиме TurboPascal, в режиме ObjectPascal {$V+} еще нужно ставить
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2017, 06:18
Помогаю со студенческими работами здесь

Макрос, или что нужно в такой ситуации
Здравствуйте! Есть база, в ней очень много записей. Есть текстовое поле, нужно из него первые 8 символов скопировать в новое, пустое. Я так...

Подскажите, пожалуйста, что будет выполнено при такой команде?
add edx, 0Dh

Какой паттерн использовать в такой ситуации?
Клиент переводит деньги на счет в банк, ему выдают кредитную карточку, по которой он может получить доступ к счету.

Как переустановить windows в такой ситуации
Друзья, всем привет. Сложилась следующая ситуация: Непонятно где словил вирус.. Теперь на экране красуется окно с ххх-баннером,...

Как посчитать Tr и Pr при такой ситуации
Здравствуйте, как посчитать Tr и Pr при такой ситуации. Нарушение Правил форума: пункт 4.3. Создавайте темы с осмысленными и понятными...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru