|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||||||||||||||||
Использование аргументов передаваемых в функцию main16.09.2015, 12:03. Показов 1388. Ответов 8
Метки нет (Все метки)
Здравствуйте, дорогие форумчане! мне нужна помощь по интересному вопросу, который я вычитал в книге.
Дело все в том, что я узнал, что в функцию main при запуске программы можно посылать строки, которые потом хранятся в массиве указателей. Что-то вроде флагов перед запуском программы, как в CNU/Linux Bash, например: shutdown now, где now - флаг программы shutdown. Хотя это, в принципе, это и есть те самые, кошерные флаги... Но проблема не в этом! проблема со строками! Ну, допустим, я получил строку... Мне же её надо как-то интерпретировать, и на основе строки выполнить какую - то определенную часть кода... И вот вопрос: Допустим, у меня есть код:
Вопрос: что мне делать в таком случае. как мне использовать это строку? Неужели мне ради того, чтобы программа стала работать, необходимо написать код переливания "из пустого в порожнее", то есть переводить эту строку-указатель-массив в обычный символьный массив, а потом сравнивать каждый символ для того чтобы понять, что же ввел пользователь? Или заниматься мысленными изворотами с функцией strstr()??? Неужели нет более простого способа? Научите меня, пожалуйста! И так же я не пойму, что же это за зверь такой,
или константный массив, имеющий свойства указателя... блин, короче, что это??? Явно, что это не полноценный тип данных string)) Простите за вопросы, если они идиотские для вас, но честно, инфы не могу нашарить...
0
|
||||||||||||||||
| 16.09.2015, 12:03 | |
|
Ответы с готовыми решениями:
8
Вычислить сумму чисел, передаваемых программе в виде аргументов командной строки Функция проверки равенства средних арифметических двух массивов, передаваемых ей в качестве аргументов Очищение аргументов функции main |
|
1 / 1 / 2
Регистрация: 19.07.2013
Сообщений: 36
|
|
| 16.09.2015, 12:23 | |
Сообщение было отмечено gledor как решение
Решение
В литературе очень часто встречается пример создания собственного класса String.
В нем действительно хранится массив типа char. И юзается он главным образом методами стандартной либы. (.compare; .erase ; .replace; .insert; .append) Для свой задачи можешь создать массив строк и сравнивать с передаваемыми из консоли параметрами. Весь лунуксовый shell именно так и работает. А char* ptr = "тралала" -- это у тебя переменная ptr хранящая адрес на статически-инициализированное место в блоке кода программы - "тралала". (можешь почитать про стек памяти под программу, если есть интерес на низкоуровном понимании) Если нужны какието дополнительные манипуляции, то можешь скопровать свою строку в заранее созданный массив: myString.copy(myCharArray, length, 0)
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 16.09.2015, 12:29 | |
Сообщение было отмечено gledor как решение
Решение
gledor, Для сравнения стоит использовать strcmp. Или что может быть проще, создать std::string из аргумента и вперед.
1
|
|
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
||||||
| 16.09.2015, 12:39 | ||||||
|
То что ты называешь массивом - это просто кусок данных в памяти, то что ты называешь именем массива - это указатель на начало этого куска в памяти, указатель - это просто число, являющееся некоторым адресом в памяти. Сам указатель изменить можно, но то, на что он указывает, - нет. Может ты не догадываешься, но строка - это обычный массив.
0
|
||||||
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
||||||
| 16.09.2015, 13:37 [ТС] | ||||||
|
указатель на массив - это адрес первого элемента массива; Вот если честно, что я вижу: Я вижу указатель, который объявляется и инициализируется при помощи синтаксиса объявления и инициализации обычных переменных, исключая звездочку(*), то есть он "косит под переменную", и очень удачно, потому что я могу вывести хранящуюся строку используя только имя указателя, без звездочки и без индекса элементов. Плюс я так понял, что я не могу получить адрес, хранящийся в указателе на тип char, (получается, это не совсем правомочный указатель?). Мало того, указатель char, указывающий на массив в памяти, пытается косить "под массив", на который указывает, но лишен одного из основополагающих его свойств. Указатель можно поменять, но исправить строку данных, накоторую он указывает, при помощи *( ptr + x ) - невозможно.. Вот впрочем я только поэтому и теряюсь в догадках,что же это такое... И да, разумеется, строка может быть только массивом, и не иначе.
0
|
||||||
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|||||||
| 16.09.2015, 14:11 | |||||||
|
Но не факт, что если ты два раза в коде напишешь "строка", то получишь один и тот же адрес. char ptr[] = "abc"; cout << (void *)ptr; или int a = (int)ptr; Или просто научись пользоваться отладчиком. Правда, научись. Даже если ты насильно уберешь константу у указателя, то при изменении данных может выскочить ошибка, т.к. страница в памяти, к которой относится адрес указателя, так же может быть только для чтения.
1
|
|||||||
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|||||||
| 16.09.2015, 15:46 [ТС] | |||||||
|
Пускай он здесь полежит, может, пригодится кому из новичков!
0
|
|||||||
|
|
|
| 16.09.2015, 18:07 | |
Сообщение было отмечено gledor как решение
Решение
2
|
|
|
130 / 25 / 12
Регистрация: 12.08.2015
Сообщений: 221
|
|
| 16.09.2015, 22:42 [ТС] | |
|
Очень познавательная статья, прям, сокровнные тонкости) Спасибо!
0
|
|
| 16.09.2015, 22:42 | |
|
Помогаю со студенческими работами здесь
9
Передача аргументов командной строки функции main()
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|