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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
#1

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

04.09.2013, 18:46. Просмотров 1663. Ответов 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++):

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

передача аргументов - C++
Здравствуйте,объясните пожалуйста,на примерах кода,что означает передача аргументов по ссылке, по значению,передача копий аргументов?

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

Передача аргументов функции - C++
Как передать функции переменную неизвестного типа?

Передача аргументов в конструктор - C++
У меня есть в классе конструктор по умолчанию: Port(const char * br = &quot;none&quot;,const char * st = &quot;none&quot;,int b = 0); Я создал производный...

Передача аргументов функции - C++
В книге Стенли Липпмана C++ Primer дошел до программы, которая выполняет замену слов в одном файле, которые указаны в другом. Например, ...

36
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 20:39 #16
Цитата Сообщение от Nikko12 Посмотреть сообщение
Это как-то может зависеть от ОС???
Какая?
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.09.2013, 20:43  [ТС] #17
Somebody, Компилятор MinGW Studio 2.05, но мне кажется он тут не причем.
alsav22, OC - Windows XP SP3
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 21:09 #18
Цитата Сообщение от Nikko12 Посмотреть сообщение
Компилятор MinGW Studio 2.05
Сейчас в ней попробовал, тот же глюк. Только не мусор выводит, а (если сделать вывод всей строки по указателю: cout<<argv[i]<<" " названия файлов в папке Debug. Нужно найти информацию, как вообще трактуется * в командной строке. Сейчас ещё в другой среде попробую с mingw.

Добавлено через 6 минут
В другой среде с mingw то же самое. Значит для компилятора mingw звёздочка не просто символ (в отличие от компилятора студии).
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
05.09.2013, 21:17 #19
У меня MinGW-builds, не помню, какая версия. Ничего со звёздочкой не делает.
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
05.09.2013, 21:25  [ТС] #20
alsav22, Если написать так, cout<<argv[i]<<" "; у меня выводятся все файлы и папки расположенные на диске F
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
05.09.2013, 21:33 #21
Со звёздочкой глюк. Порылся в отладчике. Ситуация такая, что именно что компилятор пишет всякую отсебятину, если есть звёздочка. Посмотрел в черновике стандарта (п. 3.6.1), там ситуации со звёздочкой не оговорены. Вывод: создатели компиляторов лепят горбатого. (У меня gcc version 4.6.2 (GCC))
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
05.09.2013, 21:42 #22
Тут суть в том, что в Linux'е ожидается, что при запуске со звёздочкой прога вместо неё уже получит список файлов, в Windows'е - нет. И получается, что MinGW приходится выбирать, как себя вести...
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.09.2013, 21:49 #23
На разных mingv попробовал... Если *, и в коде выводе строки (cout<<argv[i]<<" "), то выводит содержимое папки, из которой .exe запускается.

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

Добавлено через 2 минуты
вот что подумал нужно еще argc на экран выводить (ну или в отладчике смотреть)
если написать вот так
MyProg *
и если argc будет 2 то обычный символ, а если больше двух значит уже ОС что то заместо неё ставит
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,198
Завершенные тесты: 1
05.09.2013, 22:37 #28
Цитата Сообщение от ValeryS Посмотреть сообщение
значит не обычный, раз столько артефактов
Все эти приколы происходят уже в программе, а для интерпретатора он обычный.
Цитата Сообщение от ValeryS Посмотреть сообщение
ты же в командную строку её загоняешь, бог знает как она интерпретируется
В Windows командная строка кидается без изменений программе, а она её переваривает.
0
ValeryS
Модератор
6681 / 5090 / 477
Регистрация: 14.02.2011
Сообщений: 17,090
05.09.2013, 22:42 #29
Цитата Сообщение от Somebody Посмотреть сообщение
Все эти приколы происходят уже в программе,
откуда ты знаешь?
по твоему программа звездочку портит?
а по моему командная строка уже ей приходит исправленная
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,494
05.09.2013, 23:01 #30
Цитата Сообщение от ValeryS Посмотреть сообщение
а по моему командная строка уже ей приходит исправленная
Да, так. Я смотрел в отладчике. Я писал уже, что создаётся впечатление, что компилятор лепит свою командную строку, какую заблагорассудится и подаёт её программе.
0
05.09.2013, 23:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2013, 23:01
Привет! Вот еще темы с ответами:

Передача аргументов в функцию - C++
При сборке кода выдает ошибку (её я написал в комментарий). Что значит ошибка? #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Передача аргументов в функции - C++
Ребят, никогда раньше не задумывался каким же образом передаются аргументы. Сейчас же дошел до передачи аргументов через указатель и...

Передача аргументов функции - C++
Всем привет. Писал код не зная, правильно ли это. В общем застрял на составлении прототипов функции и функции мэин. И ещё, можно ли так как...

Передача аргументов по значению - C++
как сделать что бы все аргументы передавались по значению то есть что бы содержимым параметров являлись копии значений соответствующих...


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

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

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