![]() |
|
Модераторы: Poseidon |
![]()
|
|
| PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
[C++]
Привет!! У меня такой вопрос, а точнее его задал учитель по программированию.
Вот такой вопрос: Какой размер будет выведен (размер b) используя эти функции 1) sizeof(b) 2) strlen(b)??? Если в 1 случае sizeof(b) = 4 байт!!! Во втором я не знаю??? Могу сказать одно, что по логике должно быть = 0, т.к строка не задана, а только выделена память под нее, но когда я написал этот код, то strlen(b) стал = 14!!??? Помогите!!! Заранее спасибо!!! |
|||
|
||||
| zkv |
|
||||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
если говорить строго, то в этом примере:
нельзя сказать определенно, ни про первое ни про второе значение. sizeof(char *); - размер указателя зависит от платформы, чаще всего он равен 4 байтам, если интересно узнать про другие варианты, то поиск поможет. strlen(b); - тут вообще полная неопределенность, так как массив не инициализирован, функция strlen() считает элементы в массиве, до первого встретившегося нуль-символа. В данном он может встретиться только случайно, возможно в участке памяти даже за пределами массива, отсюда результат 14, в других условиях (на другой машине, в другой момент времени запуска, да просто звезды так сложатся) результат может быть другим. Если бы мы инициализировали массив (естественно правильно) то функция давала бы количество элементов до первого нуля, например такой код даст 0:
передай преподу, что sizeof это не функция а оператор Это сообщение отредактировал(а) zkv - 6.12.2007, 18:37 |
||||
|
|||||
| PRF |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
ну это не препод сказал функция, а я!!! Спасибо!!! И еще если про строковые указатели, то можете помочь разобраться в этой задачи!!! я не прошу решить ее и написать код, а просто объяснить, я не могу понять что и как!!! Задача!!! Создать массив строк. У пользователя должна быть возможность добавлять строку и просматривать на экране весь массив строк. Строки могут иметь разную длину, то есть память под них должна выделяться динамически. Использовать массив указателей на массивы строк!! В этой задачи я на понимаю "Использовать массив указателей на массивы строк!!" Вроде все остальное понятно, только вот то что указатель на чар может выделить память максимум в 255 символов
Если строка будет больше 255 символов, то мы должны выделить новую память большего размера, скопировать туда эту строку и удалить предыдущую!! Я это где то прочитал!! Но вот в чем дело, как выделить память большего размера > 255 символов, если максимум 255 символов, не понимаю??? |
||||
|
|||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
какие 255 символов, хоть под 10 000 000 выдели, главное чтобы оперативки хватило.
ну это просто: например массив под 10 строк неопределенной длины:
итого у нас тут массив указателей на строки из 10 элементов (его тоже можно сделать динамическим) под первые три указателя мы выделили участки памяти различного размера, остальные не использовали, в конце память освободили. Это сообщение отредактировал(а) zkv - 6.12.2007, 19:50 |
|||
|
||||
| PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
ага понятно, вот только немного не так в задании, ну т.е я думал что это для всех одинаково!!!
Посмотри пожалуйста файл так в задании еще рисунок прилагается, как это должно выглядеть!!! Присоединённый файл ( Кол-во скачиваний: 5 )
_______4.pdf 82,27 Kb |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
то что я рассказывал относится ко второй задаче. а по первой на форуме куча примеров, даже в этом разделе. Поищи по словам динамические линейные списки. |
|||
|
||||
| PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
не,, я только про 2 задачу, а почему на рисунке используется указатель на указатель????
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 21 Всего: 92 |
ты у меня спрашиваешь? Там написано одно, а нарисовано другое, откуда мне знать, что именно требуется? если следовать рисунку, то принцип такой:
|
|||
|
||||
| PRF |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 135 Регистрация: 13.10.2007 Репутация: нет Всего: нет |
ага все спасибо, я просто думал может как то по другому!!!
|
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |