1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
|
|||||||||||
1 | |||||||||||
Sizeof и Динамический символьный массив!14.12.2016, 20:26. Показов 3995. Ответов 12
Метки нет Все метки)
(
В первом примере sizeof показывает кол-во элементов в массиве!
Предполагаю что во втором примере я передаю не массив а элемент массива. Если это так то как можно исправить это......не пойму.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
14.12.2016, 20:26 | |
Ответы с готовыми решениями:
12
Ввод данных/выделение памяти (динамический символьный массив) Скопировать одномерный символьный массив в двумерный символьный массив |
16495 / 8988 / 2205
Регистрация: 30.01.2014
Сообщений: 15,603
|
||||||
14.12.2016, 20:39 | 2 | |||||
![]() Решение
В общем случае надо сохранять размерность массива где-то.
Что-то "высчитать" можно только в ограниченных случаях, например, если у нас С-строка и мы можем рассчитывать на нуль-символ в конце. Добавлено через 5 минут Maxim09, поправил твой пример:
1
|
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
|
|
14.12.2016, 20:40 [ТС] | 3 |
Думаю думаю никак не придумаю как написать правильный код.
![]()
0
|
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
|
|
14.12.2016, 20:43 [ТС] | 5 |
DrOffset, Спасибо большое.
0
|
Вездепух
![]() ![]() 10427 / 5697 / 1552
Регистрация: 18.10.2014
Сообщений: 14,059
|
|
14.12.2016, 20:48 | 6 |
sizeof никогда не показывает никакое "кол-во выделяемой памяти". sizeof *ch во втором примере показывает размер типа операнда *ch , т.е. sizeof(char) , т.е. 1 байт.И в первом и во втором случае sizeof возвращает одно и то же - размер типа операнда.Никак. Узнать размер динамически выделенного массива невозможно. Только вручную запоминать этот размер.
1
|
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
|
||||||
14.12.2016, 21:00 [ТС] | 7 | |||||
А почему не возможно? Если в массив ведь передаётся кол-во символов для ввода вот:
0
|
Вездепух
![]() ![]() 10427 / 5697 / 1552
Регистрация: 18.10.2014
Сообщений: 14,059
|
|
14.12.2016, 21:05 | 8 |
Оно-то передается. И даже может быть где-то там внутри запоминается (см. Можно ли обойти динамический массив не зная его размер?)
Но язык С++ не предоставляет средств для того, чтобы потом этот размер оттуда как-то "выцарапать". Поэтому запоминать его приходится самостоятельно и вручную.
0
|
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
|
|
14.12.2016, 21:09 [ТС] | 9 |
А если допустим нужно вычислить размер символьного массива? То как это можно осуществить?
0
|
![]() 8719 / 4299 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
|
|
14.12.2016, 21:14 | 10 |
возможно при помощи расширений от компиляторов.
https://msdn.microsoft.com/ru-... 077bc.aspx
0
|
16495 / 8988 / 2205
Регистрация: 30.01.2014
Сообщений: 15,603
|
|
14.12.2016, 21:22 | 11 |
Если под символьным массивом понимается С-строка (обычно таки именно это и понимается), то пример вычисления размера такой строки дан был выше.
1
|
Вездепух
![]() ![]() 10427 / 5697 / 1552
Регистрация: 18.10.2014
Сообщений: 14,059
|
||||||
14.12.2016, 23:27 | 12 | |||||
Разумеется. Но, во-первых, это частные расширения. И, во-вторых,
_msize - это функция группы malloc/free , то есть она возвращает размер выделенного сырого блока памяти. Он в общем случае может быть больше запрошенного new[] размера массива.Размер же массива, передававшийся в new[] в случае char массива не хранится нигде вообще (как я уже подробно писал по приводившейся ссылке). Поэтому запросить его не получится даже через расширения.И, кстати, если вспомнить, что для типов с нетривиальным деструктором new[] запоминает рамер массива отдельно, то становится ясно, что в общем случае передавать возвращенный new[] указатель в _msize нельзя. Осмысленного результата оно не вернет, даже если не накроется.Добавлено через 1 час 34 минуты
_msize .
3
|
0 / 0 / 0
Регистрация: 10.01.2018
Сообщений: 9
|
||||||
13.10.2018, 21:19 | 13 | |||||
sizeof() здесь не поможет. Дабы узнать длину символьного массива можно написать функцию:
0
|
13.10.2018, 21:19 | |
Помогаю со студенческими работами здесь
13
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |