| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Узнать размер массива в C++ |
| Автор: SFY 29.9.2007, 10:52 |
| Как узнать размер массива в C++? Не пойму... Приведу пример: Консольное приложение int _tmain(int argc, _TCHAR* argv[]) { return 0; } Допустим, передаю приложению 2 параметра, они заносятся в массив argv[]. Необходимо определить, что в этот массив было действительно передано 2 параметра, не больше и не меньше. Пытаюсь определить проверкой на размер массива но не пойму как это сделать P.S. В MSDN не отправлять. Хочу пример! |
| Автор: Damarus 29.9.2007, 11:06 |
| Никак. PS. В данном случае argc - количество элементов argv. |
| Автор: JackYF 29.9.2007, 12:16 |
| И вообще принято при передаче таких чистых массивов в функцию в одном из параметров передавать и размер массива. main() не исключение |
| Автор: DigitSphinx 29.9.2007, 16:24 |
| Как написал Damarus “argc” и есть кол-во переданных параметров. Или я вопроса не понял ?! |
| Автор: 0lmer 29.9.2007, 16:53 |
| argc = 1 если параметров не передано argc = 1 + <кол-во параметров> если есть параметры первуй(или нулевой в массиве argv) параметр всегда имя программы |
| Автор: comcon1 29.9.2007, 18:20 |
| можно как вариант, когда создаешь массив char* сам, последнему элементу всегда писать NULL. и проверять, где NULL, там конец. но это не выгодно по времени исполнения. |
| Автор: SFY 29.9.2007, 22:53 |
| Спасибо, помогло! |
| Автор: Любитель 29.9.2007, 23:50 | ||
Чтоб людей запутать! Всё равно под плюсами NULL развернётся в простой 0, зато враги код не прочтут! + лучше заносить не ноль, а скажем 24. Правда, появятся проблемы с массивами, содержащими 24... Это можно почти пофиксить, используя в качестве "метки", например, три элемента массива. Скажем 24, 37, 92. Вероятность сбоя значительно падает! |
| Автор: Dov 30.9.2007, 00:34 |
| comcon1 имел ввиду не строку символов, а массив указателей, последнему элементу которого присвоено значение NULL. Я так думаю... |
| Автор: JackYF 30.9.2007, 00:56 |
я тоже так думаю |
| Автор: UnrealMan 30.9.2007, 09:08 | ||
А, ну так можно, да. |
| Автор: Damarus 30.9.2007, 11:03 | ||||
Кстати, в "расширенной" версии main так и есть:
|
| Автор: JackYF 30.9.2007, 12:04 |
Это что еще за расширенная версия? и чем она лучше обычной? что-то в стандарте я ее не видал... |
| Автор: MAKCim 30.9.2007, 12:31 |
| JackYF, расширенная версия не может быть хуже или лучше, она просто предоставляет больше информации |
| Автор: comcon1 30.9.2007, 12:48 |
| да, я имел ввиду массив строк, последний NULL. Кстати какой-то линуховой функции, кажется вызова программы execv, можно как раз передавать массив строк, заканчивающийся NULL. Так что эта идея юзается на высших уровнях. И еще, конечно же, эта идея юзается в самом char*. Конец строки там, где символ \0. |
| Автор: JackYF 30.9.2007, 13:37 |
envp - это список переменных окружения, что ли? и под какими ОС оно предоставляется? |
| Автор: 0lmer 30.9.2007, 13:43 |
| кстати тут говорили о занесении NULL в конец массива, по моему лучше уж тогда сохранять длину в первом элементе массива. так если не ошибаюсь строки в паскале организованы. |
| Автор: Damarus 30.9.2007, 14:54 | ||||
Это расширение:
|
| Автор: MAKCim 30.9.2007, 14:56 | ||
под всеми, где есть С-компилятор |
| Автор: takedo 3.10.2007, 05:45 | ||
Любитель,
Конечно лучше и удобнее всего хранить длину в первых двух, трех, четырех байтах. Однако, можно сделать и по другому. |