Программерские приёмчики: размер String-массива.
- Войдите на сайт для отправки комментариев
Пнд, 12/04/2021 - 13:53
День добрый. Столкнулся с забавной несуразностью в языке: если есть необходимость, например, перебрать в цикле String[], необходимо где-то (отдельной переменной) жёстко определять количество элементов в массиве. :-( Встроенная в релизацию языка функция sizeof() возвращает размер в байтах, что, при динамическом определении количества элементов массива, может удовлетворять лишь в случае, когда все элементы массива имеют одинаковую длину.
Вопрос к Зубрам Ардуинопрограммирования: есть ли в вашем арсенале какие-то ухищрения, способные обойти вышеупомянутое?
Есть один секрет, доступный только самым великим гуру программирования. Перед программированием нужно прочитать документацию. В ней всё написано.
Открою великий секрет - в языке Си "все элементы массива имеют одинаковую длину" всегда, на то он и массив.
присоединяюсь к предыдущему оратору - может вам что-то почитать ПРЕЖДЕ чем задавать вопросы., а то сейчас вы даже спросить грамотно не можете.
А если хотите задать вопрос и получить ответ, приведите код (только полностью), чтобы было видно какие именно массивы Вы имеете в виду.
Может быть это все потому, что массив вида:
String arr[3]={"abc","defgh","ijklmno"};
По сути своей является двумерным ?
Ну, во, первых не является. А во-вторых, давайте сейчас разведём кофейную гущу и начнём гадать какого там вида у ТС массив.
Если ему надо - приведёт код, а если не надо, так нам-то оно нафига?
Хотя опять же все с виду нормально считает в таком случае:
Хотя опять же все с виду нормально считает в таком случае:
а почему он должен иначе считать? - это одномерный массив. И элементы, опять же, одинаковой длины :)
код, по сути, вот от такого ничем не отличается:
Вот мне и интересно, почему так.
Все строки имеют разное количество символов, но при этом имеют один размер.
Причем, если я задаю строку произвольной длины, то sizeof() возвращает значение 24, хотя ее длина может быть и 100символов.
Вопрос, где об этом почитать ?
Почитал , узнал про string.length() и string.capacity().
А что же тогда возвращает sizeof() ?
В описании sizeof и в определении String, очевидно.
Ты просто посмотри КАКОЙ размер возвращает sizeof. И подумай, на размер чего он смахивает ?
неn там никакого перебора. Число элементов массива в коде Кактуса вычисляется в одно действие. без всякого перебора:
Вы хотя бы пытайтесь вникнуть в чужие ответы, если уж не хотите читать документацию.
Ждать, что человек, не хотящий читать документацию, будет читать ответы - признак безумия.
Ждать, что человек, не хотящий читать документацию, будет читать ответы - признак безумия.
нафига тогда спрашивать, если не готов принять правду, хотя и неожиданную :) - что любой массив Си всегда имеет элементы фиксированной длины.
нелогично. Выходит, в памяти для каждого элемента массива резервируется обьём, равный самому длинному элементу?
нелогично. Выходит, в памяти для каждого элемента массива резервируется обьём, равный самому длинному элементу?
Логично. Выходит, что в памяти резервируется объём для размера указателя на объект String помноженный на количество таковых объектов.
нелогично. Выходит, в памяти для каждого элемента массива резервируется обьём, равный самому длинному элементу?
не угадали. Создайте несколько экземпляров String разной длины, от пары символов до пары строк текста. Потом измерьте их размер посредством sizeof() - вы убедитесь
а) в том что размер экземпляра String не зависит от хранящейся в нем строки и
b) что этот размер может быть МЕНЬШЕ длины этой строки
Читайте документацию по String
...в памяти резервируется объём для размера указателя на объект String помноженный на количество таковых объектов.
да, похоже на то. Спасибо.
да, похоже на то. Спасибо.
да он, похоже, сомневается??
Слушайте, ну не позорьтесь уже, ЧИТАЙТЕ ДОКУМЕНТАЦИЮ!
...ну не позорьтесь уже, ЧИТАЙТЕ ДОКУМЕНТАЦИЮ!
Уважаемый, если бы я спросил, а читать ли мне документацию, а Вы бы мне ответили, что - да, читать, то всё было бы правильно. Здесь же я задал вопрос, потому, что НЕ НАШЁЛ там решения возникшей проблемы или банально НЕ ПОНЯЛ. Для чего, собственно, форум нужен?
Если Вы и отсылаете к документации, не сочтите за труд дополнить своё праведное возмущение ссылочкой. Пожалуйста.
Уважаемый, если бы я спросил, а читать ли мне документацию, а Вы бы мне ответили, что - да, читать, то всё было бы правильно.
если у вас вообще возникает вопрос "А читать ли мне документацию?" - то делать вам в программировании и конкретно на этом форуме нечего.
Здесь же я задал вопрос, потому, что НЕ НАШЁЛ там решения возникшей проблемы или банально НЕ ПОНЯЛ. Для чего, собственно, форум нужен?
Уж не для того, чтобы вестись на такое очевидноe вранье.
нет, я понимаю, что удел Великих - надувать щёки и отсылать читать документацию. :-) ... как КОНКРЕТНО ...
Нет, я понимаю, что удел альтернативно умеющих читать, топать ногой и требовать КОНКРЕТНЫХ ответов!
Но КОНКРЕТНЫЙ ответ был дан ещё в посте #6 и посте #7 -
и что-то, благодарности отвечающим от Вас не поступило, только гнилые наезды.
Это видимо, вина великих, что Вы ответа не заметили и не поняли?
...КОНКРЕТНЫЙ ответ был дан ещё в посте #6 и посте #7 и что-то, благодарности отвечающим от Вас не поступило, только гнилые наезды.
По постам: пост 19 разяснил, как это работает (читайте пост 21). Благодарность была озвучена. Замечу однако, что лишь пост 6 содержал конкретный пример, остальные Гуру лишь истерили, что новичкам тут нечего делать, что где-то про это уже написано, и что это надо найти и прочитать. Тем не менее - спасибо, как оно работает, стало понятно.
Dimanoss, я уже понял Вашу отмазку. Моё отношение к ней и к Вашим вопросам вообще, Вы, наверное, уже поняли по моему ответу в Вашей новой теме. Оно не изменилось после этого Вашего поста.
Моё отношение ... к Вашим вопросам вообще.....
если ЕвгенийП, признанный здесь знаток организации памяти, не смог одной фразой ответить на вопрос, видимо, вопрос был не таким уж и простым. :-) Не смог или не захотел.
если ЕвгенийП, признанный здесь знаток организации памяти, не смог одной фразой ответить на вопрос, видимо, вопрос был не таким уж и простым. :-)
теперь, когда вы знаете ответ - перечитайте вопрос в первом сообщении. Если вы будете честны перед собой - вы увидите, что этот вопрос не простой, он глупый. А это не одно и тоже, на глупые вопросы не так просто ответить.