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

Динамическое выделение памяти под массив char

01.05.2019, 19:33. Показов 3574. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Мне нужен массив символов и я выделяю память так:
C++
1
char* ch = new char[2];
Полагала, что так выделяеся память для двух символов. Но если вывести каждый символ этого массива, то в нём почему-то будет храниться больше символов.
C++
1
2
3
4
5
6
char* ptr = ch;
while (*ptr != '\0')
{
    cout << *ptr;
    ptr++;
}

Вывод: ══²²²²
С массивами для int память выделяется как и ожидалось под нужное количество, которое указывается в квадратных скобках. Почему с символами это не работает? Или я неправильно что-то делаю?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2019, 19:33
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Доброго времени суток. Как реализовать динамическое выделение памяти под массив, к примеру размера n, при том, что значение этого n в...

Динамическое выделение памяти под массив
Здравствуйте! Помогите разобраться.Сама программа есть, но без массива.Не могу сообразить как сделать. Задание: Вывести на печать все...

Динамическое выделение памяти под массив
Я хочу функцию использовать пару раз, количество команд будет уменьшаться, и &quot;n&quot; надо менять. Как написать не знаю. 12 или 13...

5
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
01.05.2019, 19:37
Цитата Сообщение от Krekcer Посмотреть сообщение
Но если вывести каждый символ этого массива
Вы пытаетесь посимвольно вывести не инициализированную(в конец никто 0 не записывал) С-строку, на которую указывает ptr, поэтому залезаете в не принадлежащую вашему процессу память.
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
01.05.2019, 19:43
Цитата Сообщение от Krekcer Посмотреть сообщение
Но если вывести каждый символ этого массива, то в нём почему-то будет храниться больше символов.
Это неправда. Оператор new выделяет именно столько памяти, сколько ты у него просишь.
C++
1
char* ch = new char[2]; // выделить блок памяти размером 2 * sizeof(char) байт.
Собака у тебя порылась именно в выводе.
C++
1
while (*ptr != '\0') // <--- вывод до первого символа, равного нулю.
Оператор выделения памяти не обнуляет ничего, в ячейках, которые он выделяет, хранится рандомный мусор, как и в ячейке, следующей за выделенным блоком. Поэтому твой цикл вывода останавливается, попадая на случайный ноль.
0
2 / 2 / 0
Регистрация: 06.09.2014
Сообщений: 28
01.05.2019, 19:43  [ТС]
Даже если инициализирую
C++
1
2
ch[0] = 'a';
ch[1] = 'b';
А потом вывожу символы, то будет выведено сначала а, потом b и за ними ещё какие-то символы. Да и если смотрю в отладчике на ch, то там тоже выдны непонятные символы. А '\0' разве конец строки не только для string или я уже путаю что-то?
0
Злостный нарушитель
 Аватар для Verevkin
10304 / 5726 / 1269
Регистрация: 12.03.2015
Сообщений: 26,525
01.05.2019, 19:51
Цитата Сообщение от Krekcer Посмотреть сообщение
А потом вывожу символы, то будет выведено сначала а, потом b и за ними ещё какие-то символы. Да и если смотрю в отладчике на ch, то там тоже выдны непонятные символы. А '\0' разве конец строки не только для string или я уже путаю что-то?
Ты читаешь комменты, которые тебе пишут-то?
0
2 / 2 / 0
Регистрация: 06.09.2014
Сообщений: 28
01.05.2019, 20:01  [ТС]
Читаю, всё поняла теперь, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.05.2019, 20:01
Помогаю со студенческими работами здесь

Динамическое выделение памяти под двумерный массив
Здравствуйте. Как мне правильно и грамотно (!) выделять память под двумерные массивы? Откуда возникла необходимость — хотел сделать...

Динамическое выделение памяти под массив int
плиз хелп Написать функцию getPrimes, которая принимает массив типа int и его размер. Функция должна вернуть указатель на новый...

Динамическое выделение памяти под двумерный массив
1) Ввести построчно элементы двумерного массива чисел. Количество столбцов задается. Количество строк (не менее 1) равно максимальному по...

Динамическое выделение памяти под двумерный массив
Нужно написать программу, динамически выделяем память под двумерный массив, функции ввода-вывода, функцию, которая будет складывать 2...

Выделение памяти под динамический массив char
Здравствуйте, код: #include &quot;pch.h&quot; #include &lt;iostream&gt; using namespace std; struct train { char* fio; char*...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru