Форум программистов, компьютерный форум CyberForum.ru

Объясните значение argc и argv - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Exxtazy
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 84
23.02.2012, 02:35     Объясните значение argc и argv #1
Ув. гуру!
Дошёл в учебники до раздела об аргументах argc и argv, но что-то ничего не понял..

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
    for (int i=0; i<argc; i++) {
        cout << argv[i] << "\n";
    }
 
    return 0;
}
1. почему после компиляции и запуска этого кода программа выдаёт следующую строку? argv является указателем на путь к моей программе на компьютере?? и это вседа так??
Код
C:\Users\ololo\documents\visual studio 2010\Projects\2\Debug\2.exe
2. цитирую учебник:
Код
предположим, что прога имеет имя ComLine. Тогда, если запустить её таким образом:
С>ComLine один два три
программа выведет на экран следующее:
ComLine
один
два
три
Это каким образом можно запустить мою программу при помощи такой строки "С>ComLine один два три"? куда это прописывать??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 02:35     Объясните значение argc и argv
Посмотрите здесь:

Что есть argc и **argv в функции int main(int argc, char **argv)? C++
C++ Аргументы main(int argc, char *argv[])
Argc, Argv замена C++
Argc и Argv C++
Объясните смысл аргументов командной строки argc и argv C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
23.02.2012, 02:41     Объясните значение argc и argv #2
argc - количество аргументов, argv - аргументы.

Цитата Сообщение от Exxtazy Посмотреть сообщение
1. почему после компиляции и запуска этого кода программа выдаёт следующую строку? argv является указателем на путь к моей программе на компьютере?? и это вседа так??
Это первый аргумент - откуда запущена программа.
Чтобы запустить из командной строки то поместите своё приложение в какую-то папку или в корень диска d допустим, запустите командную строку, введите cd d:\, после этого введите 2.exe параметр1 параметр2 например.
Exxtazy
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 84
23.02.2012, 02:48  [ТС]     Объясните значение argc и argv #3
а, всё понял.
спасибо, интересно)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.02.2012, 03:04     Объясните значение argc и argv #4
Дело в том, что функция main перегружена. Проще- сществует как бы две ипостаси (объявления) main, вот они:
C++
1
2
int main ();
int main(int argc, char *argv[]);
Ты можешь пользоваться любой из них. Если ты пользуешься второй, то в параметре argc- количество принимаемых аргументов, а argv суть массив строк, каждый из которых и есть аргумент. Подробнее:

++++++++++++++++++++++++++++++++++++++++++++

То, о чём ты спрашиваешь, называется запуск из консоли.
Зайди в консоль, потом (будучи в консоли) зайди (умеешь?) в папку, где находится твоя программа
И вот там-то и напечатай: ComLine один два три<Enter>

Вот теперь подсчитаем, это будет 4 аргумента. И их все можно вывести в программе main. То есть argv[0] содержит адрес строки "ComLine", argv[1] содержит адрес строки "один", argv [2] содержит адрес строки "два" и argv[3] содержит адре строки "три"

И все эти строчки печатаются в коде
C++
1
2
3
for (int i=0; i<argc; i++) {
                cout << argv[i] << "\n";
  }
+++++++++++++++++++++++++++++++++++++++++++++++++

Из ньюансов:

1) argv[0] ВСЕГДА указывает на адрес строки, содержащей имя команды (ComLine в нашем случае). То есть аргументов (а по сути, только "один" "два" и "три" являются аргументами) может вообще не быть, то есть ты можешь запустить прогшрамму одной командой:
C++
1
ComLine
2) Отсюда второй вывод- argv всегда не меньше 1-ы! Ведь хотя бы одна строчка (имя команды) в массиве указателей должна присутствовать

3)А если ты тычешь ты ярлык мышью, то понятное дело, ты ТОЖЕ никаких аргументов не передаёшь, ни один ни два и не три. Но каким-то образом полный путь к твоей команде и интерпретируется как argv[0]. Механизм такой интерпретации мне неизвестен, да и не к чему он, просто запомни, если вызываешь программу не из консоли, то argv[0] указывает на полный путь к этой программе, а argc, соттветсвенно, равен 1.

Не по теме:

Чё я зря писал, что ли?

IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
23.02.2012, 03:15     Объясните значение argc и argv #5
Цитата Сообщение от kravam Посмотреть сообщение
то понятное дело, ты ТОЖЕ никаких аргументов не передаёшь
Не уверен, но вроде argv[0] передается программе OS-ю, ей он известен. Другие аргументы можно установить в свойствах ярлыка.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.02.2012, 03:18     Объясните значение argc и argv #6
Ну и я не уверен можно ли имя команды назвать аргументом. Впрочем, не суть. Важно что оно будет в argv [0].Это главное А на счёт свойств ярлыка- не знал, спасибо.
Exxtazy
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 84
23.02.2012, 03:25  [ТС]     Объясните значение argc и argv #7
kravam, Вам отдельное спасибо за столь подробное объяснение) теперь всё предельно ясно

Цитата Сообщение от IGPIGP Посмотреть сообщение
Другие аргументы можно установить в свойствах ярлыка.
как ни странно об этом я знал ещё до изучения программирования)
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6171 / 2900 / 283
Регистрация: 04.12.2011
Сообщений: 7,710
Записей в блоге: 3
23.02.2012, 03:42     Объясните значение argc и argv #8
Цитата Сообщение от kravam Посмотреть сообщение
Ну и я не уверен можно ли имя команды назвать аргументом.
Не имя команды, - полный путь источнику запущенного процесса (к exe-шнику например). От туда и начинается его первый текущий каталог, к-рый потом можно менять изнутри конечно. Но процесс зарегистрирован OS-ю, и у нее можно переспросить, так-что вроде можно бы было и не передавать.
Может это следствие совместимости с DOS?

Добавлено через 3 минуты
Цитата Сообщение от Exxtazy Посмотреть сообщение
как ни странно об этом я знал ещё до изучения программирования
Но не знали, где именно программа их находит и как обрабатывает. А вот в аргументах main() и находит, о чем karavam и говорит)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2012, 08:02     Объясните значение argc и argv
Еще ссылки по теме:

argv и argc передача аргумента(пароль) C++
argv и argc C++
Argc, argv[] C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.02.2012, 08:02     Объясните значение argc и argv #9
Есть еще такая штука(нестандартная, но под виндой и никсами работает)
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
 
int main(int argc, char ** argv, char ** envp)
{
    while ( *envp )
        puts(*envp++);
 
        return 0;
}
Yandex
Объявления
23.02.2012, 08:02     Объясните значение argc и argv
Ответ Создать тему
Опции темы

Текущее время: 01:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru