Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91

Смысл "+1"

03.08.2013, 20:38. Показов 905. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток, господа! Кто нибудь знает, для чего в этом фрагменте кода используется "+1"?
C++ (Qt)
1
itsString = new char [itsLen+1];
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.08.2013, 20:38
Ответы с готовыми решениями:

Смысл выражения
В чем смысл выражения x%=(N+1); y%=(M+1);

Смысл обьединений
Обьясните смысл обьединений. Известно, что с их помощью можно помещать обьекты в одной области памяти. Но что дает такая возможность? И...

Смысл выражения x%2
Здравствуйте. Помогите разобраться с кодом. Я только начинаю изучать C++. Просматриваю примеры кодов из раздела "Задача для лучшего...

12
Сгибальщик
 Аватар для Бендерродригез
42 / 42 / 4
Регистрация: 18.05.2013
Сообщений: 220
03.08.2013, 20:39
Место под нулевой символ, дабы была строка, а не массив символов.
1
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
03.08.2013, 20:52
оо.. знакомый код, если ты учил массивы, то должен знать, что если у тебя массив massiv[100] то последний элемент в массиве у тебя massiv[99], а massiv[100] это уже выходит за область видимости массива, и изменяет параметры какой-то другой программы, что может закончиться печально, в том числе для твоей ОС.

после строчки:
C++
1
itsString = new char [itsLen+1];
у тебя должна идти строчка
C++
1
itsString[itsLen] = '\0';
если бы не было [itsLen+1], то твой массив вышел бы за область видимости.
1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2013, 20:53
Если предположить, что itsLen - это количество символов в строке (без символа конца строки '\0'), то для выделения памяти под такую строку, нужно выделить на 1 элемент больше, чтобы туда поместился и '\0'.
1
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
03.08.2013, 20:57  [ТС]
Цитата Сообщение от VLK Посмотреть сообщение
оо.. знакомый код, если ты учил массивы, то должен знать, что если у тебя массив massiv[100] то последний элемент в массиве у тебя massiv[99], а massiv[100] это уже выходит за область видимости массива, и изменяет параметры какой-то другой программы, что может закончиться печально, в том числе для твоей ОС.

после строчки:
C++
1
itsString = new char [itsLen+1];
у тебя должна идти строчка
C++
1
itsString[itsLen] = '\0';
если бы не было [itsLen+1], то твой массив вышел бы за область видимости.
VLK, скажите, пожалуйста, почему именно такой тип записи?
C++
1
itsString[itsLen] = '\0';
Почему не такой? Изначально, itsLen = 11. Значит нулевой символ должен быть на позиции 12-ой позиции.
C++
1
itsString[itsLen+1] = '\0';
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2013, 21:04
Цитата Сообщение от Erjay Посмотреть сообщение
Значит нулевой символ должен быть на позиции 12-ой позиции.
Индексы начинаются с 0. Массив из 12 элементов, индексы: 0 - 11.

Добавлено через 3 минуты
Ручная запись '\0' в конец массива не всегда нужна, зависит от способа копирования в него строки. Стандартные функции копирования (например, strcpy()) сами это делают, главное, чтобы под него было место.
1
0 / 0 / 0
Регистрация: 03.08.2013
Сообщений: 91
03.08.2013, 21:05  [ТС]
11-ая позиция, хорошо. Но, почему, не такой тип записи?
C++ (Qt)
1
itsString[itsLen+1] = '\0';
0
 Аватар для VLK
198 / 170 / 19
Регистрация: 05.05.2013
Сообщений: 1,236
03.08.2013, 21:10
Цитата Сообщение от Erjay Посмотреть сообщение
Почему не такой?
потому что все закончится печально

Если ты создал динамический массив и выделил под него память, а именно это сделано в этой строчке:
C++
1
itsString = new char [itsLen+1];
т.е. допустим itsLen = 100, в итоге эта строчка превращается у тебя в:
C++
1
itsString = new char [100+1];
а потом:
C++
1
itsString = new char [101];
то это 101 нельзя изменить (нет может быть можно но, тебе пока рано лезть в эти манипуляции)

а запись:
C++
1
itsString[itsLen+1] = '\0';
будет иметь вид:
C++
1
itsString[101+1] = '\0';
а потом:
C++
1
itsString[102] = '\0';
но массив то имеет 101 элемент, а ты пытаешься в 102 элемент записать что то (в элемент, который не существует), тут даже 101 не существует (т.к. массив начинается с 0, а не с 1).

Еще для понимания:

C++
1
itsString = new char [itsLen+1];
это создание и выделение памяти под массив, а
C++
1
itsString[itsLen+1] = '\0';
это запись в массив, в элемент номер itsLen+1 значения '\0'

точно так же как:

C++
1
2
int var; // аналог itsString = new char [itsLen+1]
var = 5; // аналог itsString[itsLen+1] = '\0'
1
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2013, 21:26
Цитата Сообщение от Erjay Посмотреть сообщение
11-ая позиция, хорошо. Но, почему, не такой тип записи?
C++ (Qt)
1
itsString[itsLen+1] = '\0';
Потому что
Цитата Сообщение от Erjay Посмотреть сообщение
Изначально, itsLen = 11.
11 + 1 = 12, itsString[12] = '\0' - выход за границу массива.
1
03.08.2013, 22:10

Не по теме:

Цитата Сообщение от VLK Посмотреть сообщение
и изменяет параметры какой-то другой программы, что может закончиться печально, в том числе для твоей ОС.
VLK, ты под real mode программируешь? :)

0
03.08.2013, 22:12

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
VLK, ты под real mode программируешь?
Ой.. я пока такое программирую что стыдно показать..

0
03.08.2013, 22:17

Не по теме:

Перефразирую вопрос - под ДОС пишешь? Потому что под любую современную ОС твое утверждение (которое я процитировал в предыдущем посте) не верно. В 32 битной ОС процессу доступно 4ГБ виртульного адресного пространства (теоретически, практически меньше) и максимум, что можно испорить выходом за границу массива - это свой же стек или залезть в куче на свои же данные.

0
03.08.2013, 22:22

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
Перефразирую вопрос - под ДОС пишешь? Потому что под любую современную ОС твое утверждение (которое я процитировал в предыдущем посте) не верно. В 32 битной ОС процессу доступно 4ГБ виртульного адресного пространства (теоретически, практически меньше) и максимум, что можно испорить выходом за границу массива - это свой же стек или залезть в куче на свои же данные.
Я пишу пока что программы из учебника, Дейтела и то еще пока не все, по поводу попасть или не попасть, пускай лучше боится попасть и проверяет эти массивы 3 раза, чем потом в многотонном коде ошибку ищет, там же не будет ему писать что он вышел за область массива, да и еще какого именно массива.

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.08.2013, 22:22
Помогаю со студенческими работами здесь

[C/C++] Смысл многоточия (...)
Не мог бы кто-нибудь пояснить смысл данного явления в языке C и C++? Гугль конечно приводит в ступор поиск троеточий :) Я видел...

Смысл директивы using
Директива using "поднимает" имена всех членов указанного namespace'а в текущий namespace, где написана данная директива?

Физический смысл паттернов
В чем состоится физический смысл паттернов, где найти литературу на эту тему?

Есть ли смысл в .h файлах?
есть или не есть? вот в чем вопрос)) ладно пошутили и хватит, а в действительности для чего они нужны если все равно вся реализация...

Непонятен смысл строки
Добрый день. Мне необходимо написать код на C# создания магического квадрата размера n*n. С четным n появились трудности, поэтому начал...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru