Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> консоль сырые аргументы 
V
    Опции темы
hexzo
Дата 4.10.2011, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Можно ли получить не распарсенную на массив значений строку, которая пишется после исполняемого файла программы в командной строке.
PM MAIL   Вверх
math64
Дата 4.10.2011, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Начинай программу не с main(), а с WinMain() (для Windows)

Это сообщение отредактировал(а) math64 - 4.10.2011, 18:54
PM   Вверх
borisbn
Дата 4.10.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Сконкатинируй все argv, кроме 0-го в одну строку


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
math64
Дата 4.10.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(borisbn @  4.10.2011,  19:24 Найти цитируемый пост)
Сконкатинируй все argv, кроме 0-го в одну строку

Между аргументами есть пробелы - число их может быть разным, и это может быть важно.  
PM   Вверх
borisbn
Дата 4.10.2011, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



math64, 
1. Не очень себе представляю ситуацию, где было бы важно кол-во пробелов между параметрами
2. В консольном приложении в Windows можно заюзать WinMain ? (Щаз без сарказма - действительно не знаю)
3. Как быне не в Windows ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Alca
Дата 4.10.2011, 20:48 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 7
Всего: 50



Ось какая?

Добавлено через 6 минут и 59 секунд
Windows:
    ::GetCommandLine();

Linux:
    "/proc/self/cmdline"


--------------------
PM WWW ICQ Skype Jabber   Вверх
hexzo
Дата 5.10.2011, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Alca Спасибо за вариант с вин апи, думаю он самый подходящий.

borisbn
Цитата

1. Не очень себе представляю ситуацию, где было бы важно кол-во пробелов между параметрами

Я тоже не очень представляю себе все такие ситуации, потому что они непредсказуемые.
Баг может быть связан со служебными символами, всякими ушками, кавыками. Одиночное ушко самоаннигилируется, пытаясь экранировать следующий символ. Пара ушек попадает в аргумент как одно.  Или , например, если поставить в качестве аргумента звёздочку, то парсер мне любезно предоставит в аргументах имена всех файлов в каталоге, вместо моей звёздочки, что мне нафиг не надо.
PM MAIL   Вверх
borisbn
Дата 5.10.2011, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Цитата(hexzo @  5.10.2011,  09:22 Найти цитируемый пост)
если поставить в качестве аргумента звёздочку, то парсер мне любезно предоставит в аргументах имена всех файлов в каталоге, вместо моей звёздочки

 smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbee
Дата 5.10.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(hexzo @  5.10.2011,  10:22 Найти цитируемый пост)
то парсер мне любезно предоставит в аргументах имена всех файлов в каталоге, вместо моей звёздочки, что мне нафиг не надо
Ну на самом деле это шел аргументы разбивает и подставляет вместо звездочек файлы, экранирует всякие символы, объединяет параметры, объединенные кавычками в один аргумент и прочая, и прочая. Не скажу, как в винде, но в линуксе в /proc/$(pidof program)/cmdline ты увидишь уже "распарсенный" вариант аргументов.


--------------------
You're face to face
With man who sold the world
PM   Вверх
hexzo
Дата 5.10.2011, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Решение.
Код

WCHAR* cmds = GetCommandLine();  
QString str = QString::fromWCharArray(cmds);
qDebug()<<str;


newbee
Цитата

Ну на самом деле это шел аргументы разбивает и подставляет вместо звездочек файлы, экранирует всякие символы, объединяет параметры, объединенные кавычками в один аргумент и прочая, и прочая.

А откуда тогда тогда функция GetCommandLine() берёт строку?
PM MAIL   Вверх
borisbn
Дата 5.10.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Не понимаю, о чём вы говорите...
Код

#include <iostream>

int main(int argc, char *argv[])
{
    for ( int i = 1; i < argc; i++ )
    {
        std::cout << argv[ i ] << std::endl;
    }
}

Цитата

D:\Work\QProjects\console\Debug>console.exe ' \n *
'
\n
*



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
newbee
Дата 5.10.2011, 10:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(hexzo @  5.10.2011,  11:02 Найти цитируемый пост)
А откуда тогда тогда функция GetCommandLine() берёт строку? 
Хз, может из астрала. Это ж винда, я про линукс сказала.

Добавлено через 3 минуты и 15 секунд
borisbn, об этом:
Код

int main(int argc,char **argv){
 while(argc-->0)
  printf("%s\n",argv[argc]);
 return 0;}


Цитата

./test *
types.cpp
types
tmp
thread.c
test_textfile
test.s
test.h
test.cpp
test2.s
test2.c
test2
test
tco.s
tco.cpp
tco2.s
tco1.s
tco
struct.cpp
struct
string
stdin.c
stdin
split.cpp
split
speed
sort_cxx
sort.cpp
sort.c
sort_c
so
sig.c
sig
sh
qt
ptr.cpp
ptr
pragma.h
pragma.cpp
pragma
pktparse
pipe.c
pipe
parser.c
parser
namespace.cpp
namespace
makefile.tar
makefile
macro.c
macro
list.cpp
list
liblib.so
lib.cpp
lib
jmp.c
input.cpp
input
hello.cpp
hello.back
hello
find.c
find
filename
file.cpp.orig
file.cpp
file.c
filec
file
div.c
div
delete.cpp
delete
date.c
date
break.cpp
break
bin.cpp
bin
b.c
a.out
alloc.cpp
alloc
a.c
a9.cpp
a9
a




--------------------
You're face to face
With man who sold the world
PM   Вверх
mes
Дата 5.10.2011, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



 smile 
Цитата(newbee @  5.10.2011,  09:36 Найти цитируемый пост)
 while(argc-->0)

красиво выглядит строчка, как будто новый оператор -->  smile .. никогда раньше не замечал... 


Это сообщение отредактировал(а) mes - 5.10.2011, 12:31


--------------------
PM MAIL WWW   Вверх
newbee
Дата 5.10.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



 smile 
mes, это новый оператор, читается так: argc стремится к нулю. Математики, не бейте)) Сначала хотела выложить более очевидный вариант с рекурсивным main, но решила никого не шокировать. А вон оно как получилось.


--------------------
You're face to face
With man who sold the world
PM   Вверх
azesmcar
Дата 5.10.2011, 13:54 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mes @  5.10.2011,  12:31 Найти цитируемый пост)
красиво выглядит строчка, как будто новый оператор -->  smile .. никогда раньше не замечал... 

Вопрос удостоился рейтинга 800 на SO smile 
http://stackoverflow.com/questions/1642028...f-this-operator

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.