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

Передача аргументов через консоль - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
04.09.2013, 18:46     Передача аргументов через консоль #1
Подскажи пожалуйста, вот такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <vector>
using namespace std;
int main (int argc, char *argv[])
{
    int i;
    vector<int>vi;
    vector<char>vc;
    for(i=1;i<argc;++i)
    {
        cout<<*argv[i]<<" ";
    }
    system("pause");
    return 0;
}
Почему если передавать аргумент вида *(звездочка), то программа выводит всякий мусор. С другими аргументами все ОК, проблема только в этом. Можно ли вообще передать *(звездочку) в виде аргумента???
P.S. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 18:46     Передача аргументов через консоль
Посмотрите здесь:

C++ Передача аргументов в ф-ию
Передача аргументов функции C++
C++ Передача аргументов в функции
передача аргументов C++
C++ Передача аргументов функции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
05.09.2013, 21:33     Передача аргументов через консоль #21
Со звёздочкой глюк. Порылся в отладчике. Ситуация такая, что именно что компилятор пишет всякую отсебятину, если есть звёздочка. Посмотрел в черновике стандарта (п. 3.6.1), там ситуации со звёздочкой не оговорены. Вывод: создатели компиляторов лепят горбатого. (У меня gcc version 4.6.2 (GCC))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 21:42     Передача аргументов через консоль #22
Тут суть в том, что в Linux'е ожидается, что при запуске со звёздочкой прога вместо неё уже получит список файлов, в Windows'е - нет. И получается, что MinGW приходится выбирать, как себя вести...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 21:49     Передача аргументов через консоль #23
На разных mingv попробовал... Если *, и в коде выводе строки (cout<<argv[i]<<" "), то выводит содержимое папки, из которой .exe запускается.

Добавлено через 2 минуты
В двойные кавычки нужно * брать, тогда нормально выведется.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.09.2013, 21:53  [ТС]     Передача аргументов через консоль #24
Цитата Сообщение от alsav22 Посмотреть сообщение
В двойные кавычки нужно * брать, тогда нормально выведется.
Спасибо, буду знать теперь
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
05.09.2013, 22:06     Передача аргументов через консоль #25
Цитата Сообщение от alsav22 Посмотреть сообщение
Нужно найти информацию, как вообще трактуется * в командной строке.
вообще во времена ДОС * трактовалась как "любое количество любых символов"
например dir *.com
выведет на экран все файлы(из этой директории) с расширением com
Все это перекочевало в консоль, по крайней мере в виндовую
может с этим связано?
есть еще ? - любой символ
попробуй с ним поэкспериментировать
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 22:23     Передача аргументов через консоль #26
Цитата Сообщение от ValeryS Посмотреть сообщение
вообще во времена ДОС * трактовалась как "любое количество любых символов"
например dir *.com
Но это уже на этапе выполнения команды. А при разборе ввода это просто обычный символ.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
05.09.2013, 22:32     Передача аргументов через консоль #27
Цитата Сообщение от Somebody Посмотреть сообщение
А при разборе ввода это просто обычный символ.
значит не обычный, раз столько артефактов
Цитата Сообщение от alsav22 Посмотреть сообщение
В двойные кавычки нужно * брать, тогда нормально выведется.
а вот так уже обычный
ты же в командную строку её загоняешь, бог знает как она интерпретируется

Добавлено через 2 минуты
вот что подумал нужно еще argc на экран выводить (ну или в отладчике смотреть)
если написать вот так
MyProg *
и если argc будет 2 то обычный символ, а если больше двух значит уже ОС что то заместо неё ставит
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 22:37     Передача аргументов через консоль #28
Цитата Сообщение от ValeryS Посмотреть сообщение
значит не обычный, раз столько артефактов
Все эти приколы происходят уже в программе, а для интерпретатора он обычный.
Цитата Сообщение от ValeryS Посмотреть сообщение
ты же в командную строку её загоняешь, бог знает как она интерпретируется
В Windows командная строка кидается без изменений программе, а она её переваривает.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
05.09.2013, 22:42     Передача аргументов через консоль #29
Цитата Сообщение от Somebody Посмотреть сообщение
Все эти приколы происходят уже в программе,
откуда ты знаешь?
по твоему программа звездочку портит?
а по моему командная строка уже ей приходит исправленная
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
05.09.2013, 23:01     Передача аргументов через консоль #30
Цитата Сообщение от ValeryS Посмотреть сообщение
а по моему командная строка уже ей приходит исправленная
Да, так. Я смотрел в отладчике. Я писал уже, что создаётся впечатление, что компилятор лепит свою командную строку, какую заблагорассудится и подаёт её программе.
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
05.09.2013, 23:04     Передача аргументов через консоль #31
Цитата Сообщение от kravam Посмотреть сообщение
Я писал уже, что создаётся впечатление, что компилятор лепит свою командную строку,
а как компилятор может "лепить" командную строку?
компилятор работает один раз, создает код
а запускать ты можешь его сколько угодно раз, и каждый раз с новой командной строкой
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.09.2013, 23:09     Передача аргументов через консоль #32
Кажется, тут путаница с терминологией начинается. Программа не с main'а начинается. Перед main'ом argc и argv заполняются ещё (и я считаю, что на этом этапе компилятор перемудрил, пытаясь сымитировать поведение звёздочки при запуске из линуксовой оболочки), поэтому мне непонятен ответ
Цитата Сообщение от kravam Посмотреть сообщение
Да, так. ... компилятор лепит свою командную строку
Всё, что накомпилировал компилятор, происходит в программе, не?
ValeryS
Модератор
6376 / 4842 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
05.09.2013, 23:21     Передача аргументов через консоль #33
Цитата Сообщение от Somebody Посмотреть сообщение
Программа не с main'а начинается.
с этим никто не спорит
можно проанализировать стартовый код
он не меняется от программы к программе
во многих компиляторах он лежит как ассемблерный листинг в отдельном файле
или скомпилировать что то типа
C++
1
2
3
4
int main()
{
 return 0;
}
и посмотреть
по крайней мере VS тупо передает все main (подробностей не помню пишу по памяти)
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
06.09.2013, 13:30     Передача аргументов через консоль #34
http://msdn.microsoft.com/en-us/library/8bch7bkk.aspx
наверное и в mingw где то библиотека такая линкуется, которая экспандит строку с шаблонами
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
06.09.2013, 13:34     Передача аргументов через консоль #35
Так это "Microsoft Specific", а тут речь про MinGW, причём не про все версии ещё.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 21:22     Передача аргументов через консоль #36
Цитата Сообщение от Somebody Посмотреть сообщение
а тут речь про MinGW, причём не про все версии ещё.
Может и про все...
Цитата Сообщение от alsav22 Посмотреть сообщение
На разных mingv попробовал...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 21:48     Передача аргументов через консоль
Еще ссылки по теме:

Передача аргументов функции C++
C++ Передача аргументов в функцию
Передача аргументов в функцию C++

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
06.09.2013, 21:48     Передача аргументов через консоль #37
Цитата Сообщение от ValeryS Посмотреть сообщение
а как компилятор может "лепить" командную строку?
ну или кто там лепит по запуску программы помимо пользователя
Yandex
Объявления
06.09.2013, 21:48     Передача аргументов через консоль
Ответ Создать тему
Опции темы

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