Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Nikko12
2 / 2 / 2
Регистрация: 07.06.2013
Сообщений: 162
#1

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

04.09.2013, 18:46. Просмотров 1813. Ответов 36
Метки нет (Все метки)

Подскажи пожалуйста, вот такой код:
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. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2013, 18:46
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача аргументов через консоль (C++):

Передача 3-dots аргументов через функцию
#include &lt;windows.h&gt; #include &lt;tchar.h&gt; void pr(const TCHAR *format, ...) {...

передача аргументов
Здравствуйте,объясните пожалуйста,на примерах кода,что означает передача...

Передача аргументов в ф-ию
void test(const T&amp; a) {} Это понятно, а что это за запись: void test(T...

Передача аргументов в приложении
Здравствуйте. Пишу оконное приложение, которое должно реализовывать функции...

Передача аргументов в функцию
При сборке кода выдает ошибку (её я написал в комментарий). Что значит ошибка?...

Передача аргументов в функцию
Хочу размерность массива задать в отдельной функции, но не получается...

36
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
05.09.2013, 21:33 #21
Со звёздочкой глюк. Порылся в отладчике. Ситуация такая, что именно что компилятор пишет всякую отсебятину, если есть звёздочка. Посмотрел в черновике стандарта (п. 3.6.1), там ситуации со звёздочкой не оговорены. Вывод: создатели компиляторов лепят горбатого. (У меня gcc version 4.6.2 (GCC))
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
05.09.2013, 21:42 #22
Тут суть в том, что в Linux'е ожидается, что при запуске со звёздочкой прога вместо неё уже получит список файлов, в Windows'е - нет. И получается, что MinGW приходится выбирать, как себя вести...
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 21:49 #23
На разных mingv попробовал... Если *, и в коде выводе строки (cout<<argv[i]<<" "), то выводит содержимое папки, из которой .exe запускается.

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

Добавлено через 2 минуты
вот что подумал нужно еще argc на экран выводить (ну или в отладчике смотреть)
если написать вот так
MyProg *
и если argc будет 2 то обычный символ, а если больше двух значит уже ОС что то заместо неё ставит
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
05.09.2013, 22:37 #28
Цитата Сообщение от ValeryS Посмотреть сообщение
значит не обычный, раз столько артефактов
Все эти приколы происходят уже в программе, а для интерпретатора он обычный.
Цитата Сообщение от ValeryS Посмотреть сообщение
ты же в командную строку её загоняешь, бог знает как она интерпретируется
В Windows командная строка кидается без изменений программе, а она её переваривает.
0
ValeryS
Модератор
7134 / 5401 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.09.2013, 22:42 #29
Цитата Сообщение от Somebody Посмотреть сообщение
Все эти приколы происходят уже в программе,
откуда ты знаешь?
по твоему программа звездочку портит?
а по моему командная строка уже ей приходит исправленная
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
05.09.2013, 23:01 #30
Цитата Сообщение от ValeryS Посмотреть сообщение
а по моему командная строка уже ей приходит исправленная
Да, так. Я смотрел в отладчике. Я писал уже, что создаётся впечатление, что компилятор лепит свою командную строку, какую заблагорассудится и подаёт её программе.
0
ValeryS
Модератор
7134 / 5401 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.09.2013, 23:04 #31
Цитата Сообщение от kravam Посмотреть сообщение
Я писал уже, что создаётся впечатление, что компилятор лепит свою командную строку,
а как компилятор может "лепить" командную строку?
компилятор работает один раз, создает код
а запускать ты можешь его сколько угодно раз, и каждый раз с новой командной строкой
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
05.09.2013, 23:09 #32
Кажется, тут путаница с терминологией начинается. Программа не с main'а начинается. Перед main'ом argc и argv заполняются ещё (и я считаю, что на этом этапе компилятор перемудрил, пытаясь сымитировать поведение звёздочки при запуске из линуксовой оболочки), поэтому мне непонятен ответ
Цитата Сообщение от kravam Посмотреть сообщение
Да, так. ... компилятор лепит свою командную строку
Всё, что накомпилировал компилятор, происходит в программе, не?
0
ValeryS
Модератор
7134 / 5401 / 669
Регистрация: 14.02.2011
Сообщений: 18,227
05.09.2013, 23:21 #33
Цитата Сообщение от Somebody Посмотреть сообщение
Программа не с main'а начинается.
с этим никто не спорит
можно проанализировать стартовый код
он не меняется от программы к программе
во многих компиляторах он лежит как ассемблерный листинг в отдельном файле
или скомпилировать что то типа
C++
1
2
3
4
int main()
{
 return 0;
}
и посмотреть
по крайней мере VS тупо передает все main (подробностей не помню пишу по памяти)
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
06.09.2013, 13:30 #34
http://msdn.microsoft.com/en-us/library/8bch7bkk.aspx
наверное и в mingw где то библиотека такая линкуется, которая экспандит строку с шаблонами
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
06.09.2013, 13:34 #35
Так это "Microsoft Specific", а тут речь про MinGW, причём не про все версии ещё.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.09.2013, 21:22 #36
Цитата Сообщение от Somebody Посмотреть сообщение
а тут речь про MinGW, причём не про все версии ещё.
Может и про все...
Цитата Сообщение от alsav22 Посмотреть сообщение
На разных mingv попробовал...
0
kravam
быдлокодер
1706 / 893 / 105
Регистрация: 04.06.2008
Сообщений: 5,524
06.09.2013, 21:48 #37
Цитата Сообщение от ValeryS Посмотреть сообщение
а как компилятор может "лепить" командную строку?
ну или кто там лепит по запуску программы помимо пользователя
0
06.09.2013, 21:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2013, 21:48
Привет! Вот еще темы с решениями:

Передача аргументов в функцию
Привет! Пишу одну программку , и , собственно , уже написал , но код у меня в...

Передача аргументов в функцию
Прошу помощи в разборе багов кода. Ошибка при компиляции связана с неверной...

Const передача аргументов
Здравствуйсте. Вот, пишу шаблонную структуру данных с произвольным...

Передача аргументов в программу
Хочу передать аргументы в программу, если использовать такую сигнатуру: int...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru