![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SFY |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 5.1.2007 Репутация: нет Всего: нет |
Как узнать размер массива в C++? Не пойму...
Приведу пример: Консольное приложение int _tmain(int argc, _TCHAR* argv[]) { return 0; } Допустим, передаю приложению 2 параметра, они заносятся в массив argv[]. Необходимо определить, что в этот массив было действительно передано 2 параметра, не больше и не меньше. Пытаюсь определить проверкой на размер массива но не пойму как это сделать P.S. В MSDN не отправлять. Хочу пример! Это сообщение отредактировал(а) SFY - 29.9.2007, 10:52 |
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
Никак.
PS. В данном случае argc - количество элементов argv. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
И вообще принято при передаче таких чистых массивов в функцию в одном из параметров передавать и размер массива.
main() не исключение |
|||
|
||||
| DigitSphinx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 442 Регистрация: 28.4.2007 Где: Москва Репутация: 1 Всего: 3 |
Как написал Damarus “argc” и есть кол-во переданных параметров.
Или я вопроса не понял ?! |
|||
|
||||
| 0lmer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 3.12.2006 Репутация: нет Всего: -1 |
argc = 1 если параметров не передано
argc = 1 + <кол-во параметров> если есть параметры первуй(или нулевой в массиве argv) параметр всегда имя программы |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
можно как вариант, когда создаешь массив char* сам, последнему элементу всегда писать NULL. и проверять, где NULL, там конец. но это не выгодно по времени исполнения.
|
|||
|
||||
| SFY |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 5.1.2007 Репутация: нет Всего: нет |
Спасибо, помогло!
|
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Во-первых, почему NULL? (NULL, вроде как, для обозначения нулевого указателя применяется, но никак не для символа). Во-вторых, это плохой вариант, если 0 может быть посередине массива (а речь-то идёт о массиве в общем случае, а не о строке). Это сообщение отредактировал(а) UnrealMan - 29.9.2007, 23:17 |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Чтоб людей запутать! Всё равно под плюсами NULL развернётся в простой 0, зато враги код не прочтут! + лучше заносить не ноль, а скажем 24. Правда, появятся проблемы с массивами, содержащими 24... Это можно почти пофиксить, используя в качестве "метки", например, три элемента массива. Скажем 24, 37, 92. Вероятность сбоя значительно падает! |
|||
|
||||
| Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
comcon1 имел ввиду не строку символов, а массив указателей, последнему элементу которого присвоено значение NULL. Я так думаю...
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
| Damarus |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
Кстати, в "расширенной" версии main так и есть:
Это сообщение отредактировал(а) Damarus - 30.9.2007, 11:12 |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Это что еще за расширенная версия? и чем она лучше обычной? что-то в стандарте я ее не видал... |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
JackYF,
расширенная версия не может быть хуже или лучше, она просто предоставляет больше информации -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
да, я имел ввиду массив строк, последний NULL. Кстати какой-то линуховой функции, кажется вызова программы execv, можно как раз передавать массив строк, заканчивающийся NULL. Так что эта идея юзается на высших уровнях. И еще, конечно же, эта идея юзается в самом char*. Конец строки там, где символ \0.
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
envp - это список переменных окружения, что ли? и под какими ОС оно предоставляется? |
|||
|
||||
| 0lmer |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 3.12.2006 Репутация: нет Всего: -1 |
кстати тут говорили о занесении NULL в конец массива, по моему лучше уж тогда сохранять длину в первом элементе массива. так если не ошибаюсь строки в паскале организованы.
|
|||
|
||||
| Damarus |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 6 Всего: 29 |
Это расширение:
|
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
под всеми, где есть С-компилятор -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: 1 Всего: 3 |
Любитель,
Конечно лучше и удобнее всего хранить длину в первых двух, трех, четырех байтах. Однако, можно сделать и по другому. -------------------- я не гольфист - я хоккеист |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |