Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76

Считывание аргументов командной строки

10.01.2022, 01:29. Показов 1417. Ответов 20
Метки c#, c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема при считывании аргументов командной строки на плюсах, задача следующая у меня есть мое приложение которое принимает аргументы от чужого приложения и проблема состоит в следующем.
Мое c++ приложение почему-то не правильно считывает аргументы с которыми запускается от чужого приложения при том, что
на c#(net.framework) все работает нормально.
Я должен получить аргументы -User и -pass
C++ считывает их в таком виде -User %user% -pass %password% через int argc, char* argv[]
А C# на фреймворке получает их в нормальном виде -User admin -pass qwe1234 через string[] args
Я не могу понять в чем проблема, кто-нибудь имеет какие-нибудь идеи ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2022, 01:29
Ответы с готовыми решениями:

Обработка аргументов командной строки
Не нашел где создать тему, поэтому решил здесь. 1. Интересуют стандарты для аргументов командной строки, то есть как обычно их...

Разбор аргументов командной строки
Для Unix существуют специальные средства для разбора опций командной строки (функции GNU getopt и getopt_long). Хотелось бы узнать, есть ли...

Ввод аргументов командной строки
Здравствуйте, такой вопрос: как задаются аргументы командной строки в си? нужно скомпилировать exe и запустить его через командную строку...

20
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
10.01.2022, 01:47
Цитата Сообщение от zanai Посмотреть сообщение
C++ считывает их в таком виде -User %user% -pass %password% через int argc, char* argv[]
Это и есть именно то, что вам передало чужое приложение.

Цитата Сообщение от zanai Посмотреть сообщение
Я не могу понять в чем проблема, кто-нибудь имеет какие-нибудь идеи ?
Ну видимо в том, что С++ и C# - это разные фреймворки, которые ведут себя по-разному.
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 01:58  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это и есть именно то, что вам передало чужое приложение.
Как раз нет, если я посмотрю в процесс хакере command line, передается оно так -User %user% -pass %password%, но считывают эти аргументы программы по разному. На шарпе читается она как надо, т.е. -User admin -pass qwe1234, а на плюсах читается -User %user% -pass %password%, как я могу считать на плюсах эти аргументы как на шарпе, что бы передалось все правильно?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
10.01.2022, 02:16
Цитата Сообщение от zanai Посмотреть сообщение
Как раз нет, если я посмотрю в процесс хакере command line, передается оно так -User %user% -pass %password%,
Не понял. Я же вам ясно сказал: это и есть именно то, что передает вам чужое приложение. Вы в этом убедились в процесс хакере.

О каком "как раз нет" вы тогда ведете речь?

Цитата Сообщение от zanai Посмотреть сообщение
но считывают эти аргументы программы по разному.
Совершенно верно, считывают по-разному. Точнее, считывают-то одинаково, но потом С# делает дополнительную обработку и замену %% переменных.

Цитата Сообщение от zanai Посмотреть сообщение
как я могу считать на плюсах эти аргументы как на шарпе, что бы передалось все правильно?
Никак. Считывается все везде одинаково и везде правильно. Но, еще раз, потом С# делает дополнительную обработку и замену %% переменных.

В С++ эту дополнительную обработку вам придется делать самостоятельно. Не хотите делать ручками - ищите готовое решение для С++.
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 04:36  [ТС]
А где мне найти эту дополнительную обработку и как она вообще производится в c#, что бы я смог её сделать для C++ ?
0
Эксперт .NET
 Аватар для Rius
12999 / 7598 / 1663
Регистрация: 25.05.2015
Сообщений: 23,142
Записей в блоге: 14
10.01.2022, 08:52
Цитата Сообщение от zanai Посмотреть сообщение
как она вообще производится в c#
https://docs.microsoft.com/ru-... ew=net-6.0
Цитата Сообщение от zanai Посмотреть сообщение
что бы я смог её сделать для C++
https://docs.microsoft.com/en-... ntstringsa
https://docs.microsoft.com/en-... gsforusera
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,846
Записей в блоге: 1
10.01.2022, 08:59
Цитата Сообщение от zanai Посмотреть сообщение
А где мне найти эту дополнительную обработку и как она вообще производится в c#
Код на C# можно декомпилировать и получить код очень близкий к оригиналу.
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 19:55  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Сообщение от zanai
как она вообще производится в c#
https://docs.microsoft.com/ru-... ew=net-6.0
Сообщение от zanai
что бы я смог её сделать для C++
https://docs.microsoft.com/en-... ntstringsa
https://docs.microsoft.com/en-... gsforusera
ExpandEnvironmentStringsA по прежнему возращает %user% и %password%, имеете ли какие-нибудь идеи почему так ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
10.01.2022, 20:01
Цитата Сообщение от zanai Посмотреть сообщение
ExpandEnvironmentStringsA по прежнему возращает %user% и %password%, имеете ли какие-нибудь идеи почему так ?
А где ваш код? Как вы используете ExpandEnvironmentStringsA?
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 20:29  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Сообщение от zanai
ExpandEnvironmentStringsA по прежнему возращает %user% и %password%, имеете ли какие-нибудь идеи почему так ?
А где ваш код? Как вы используете ExpandEnvironmentStringsA?
CHAR tttt[MAX_PATH];
ExpandEnvironmentStringsA("%user%", tttt, MAX_PATH - 1); пробовал так
и так пробовал ExpandEnvironmentStringsA(fullarg, ModulePath, MAX_PATH - 1); fullarg типа char и содержит полную строку аргументов
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
10.01.2022, 20:41
Цитата Сообщение от zanai Посмотреть сообщение
CHAR tttt[MAX_PATH];
ExpandEnvironmentStringsA("%user%", tttt, MAX_PATH - 1); пробовал так
У меня все работает, если я использую существующую переменную окружения. Но в обычном окружении Windows нет никакого %user% и уж тем более нет никакого %password%. Так что откуда ваш C# берет эти переменные - отдельный вопрос.

У вас часом в окружение не добавлены вручную такие переменные? Вы запускаете это на той же машине, где и запускали C# программу?
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 21:17  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
У меня все работает, если я использую существующую переменную окружения. Но в обычном окружении Windows нет никакого %user% и уж тем более нет никакого %password%. Так что откуда ваш C# берет эти переменные - отдельный вопрос.
У вас часом в окружение не добавлены вручную такие переменные? Вы запускаете это на той же машине, где и запускали C# программу?
Мне неизвестно где хранятся эти переменные и как они создаются, как я и сказал, мою программу запускает сторонняя программа с этими аргументами, C# как-то получается то, что хранится под %user% при считывании, возможно в окружение эти переменные добавляются программой которая запускает мою программу, но как мне их так же считать на c++ ? Так-как c# не дает мне реализовать конкретные функции моей программы.
0
Эксперт .NET
 Аватар для Rius
12999 / 7598 / 1663
Регистрация: 25.05.2015
Сообщений: 23,142
Записей в блоге: 14
10.01.2022, 21:22
Цитата Сообщение от zanai Посмотреть сообщение
имеете ли какие-нибудь идеи почему так
Там 2 функции приведены. Вы обе пробовали?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12928 / 6796 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
10.01.2022, 21:31
Цитата Сообщение от zanai Посмотреть сообщение
Мне неизвестно где хранятся эти переменные и как они создаются
Ну так выполните set в командной строке Windows. Есть в полученном списке такие переменные?
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 21:49  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Там 2 функции приведены. Вы обе пробовали?
Да.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так выполните set в командной строке Windows. Есть в полученном списке такие переменные?
Их там нету.
0
Эксперт .NET
 Аватар для Rius
12999 / 7598 / 1663
Регистрация: 25.05.2015
Сообщений: 23,142
Записей в блоге: 14
10.01.2022, 22:13
Какой код возвращает ExpandEnvironmentStringsA?
Подсуньте такой код чужой программе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    cout << "You have entered " << argc
        << " arguments:" << "\n";
 
    for (int i = 0; i < argc; ++i)
        cout << argv[i] << "\n";
    int a;
    cin >> a;
}
Windows Batch file
1
2
3
4
5
6
7
8
9
10
set _user="user1"
set _pass="pass2"
 
ConsoleApplication1.exe -User %_user% -Pass %_pass%
You have entered 5 arguments:
ConsoleApplication1.exe
-User
user1
-Pass
pass2
На 12 строке программа приостанавливается и в ProcessExplorer можно увидеть, что у exe командная строка была: ConsoleApplication1.exe -User "user1" -Pass "pass2"
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 22:31  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Какой код возвращает ExpandEnvironmentStringsA?
Какой код возращает я не смотрел
Цитата Сообщение от Rius Посмотреть сообщение
Подсуньте такой код чужой программе:
Т.е. изменить код моей программы на этот ?
0
Эксперт .NET
 Аватар для Rius
12999 / 7598 / 1663
Регистрация: 25.05.2015
Сообщений: 23,142
Записей в блоге: 14
10.01.2022, 22:36
Можно собрать новый exe и его подсунуть вызывающей программе. Прям заменять исходники у вас - не обязательно.
0
0 / 0 / 0
Регистрация: 21.06.2019
Сообщений: 76
10.01.2022, 22:53  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Можно собрать новый exe и его подсунуть вызывающей программе. Прям заменять исходники у вас - не обязательно.
Так оно выводит правильно используя ваш батник
Цитата Сообщение от Rius Посмотреть сообщение
set _user="user1"
set _pass="pass2"
ConsoleApplication1.exe -User %_user% -Pass %_pass%
Code
1
2
[+]Getting arguments
-User user1 -Pass pass2
Но при запуске с программы той, все так же %user% и %password%, тогда я щас еще больше запутался... И в process explorer отображается именно %user% и %password% при запуске от той программы

Добавлено через 6 минут
При запуске с
Цитата Сообщение от zanai Посмотреть сообщение
set _user="user1"
set _pass="pass2"
ConsoleApplication1.exe -User %_user% -Pass %_pass%
-User "user1" -Pass "pass2" в process explorer выглядит так
0
Эксперт .NET
 Аватар для Rius
12999 / 7598 / 1663
Регистрация: 25.05.2015
Сообщений: 23,142
Записей в блоге: 14
10.01.2022, 23:53
Можно использовать C# программу как промежуточную, для запуска сишной с распознанными аргументами.
Можно поискать в коде вызывающей программы, каким именно образом она производит вызов. Возможно, дизассемблером, отладчиком.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2022, 23:53
Помогаю со студенческими работами здесь

Вывод аргументов командной строки
Доброго времени. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int _tmain(int argc, _TCHAR*...

Использование аргументов командной строки
Всем доброго дня !!! Подскажите пожалуйста как связать этот код программы с командной строкой ? #include &lt;fstream&gt; ...

Проверка аргументов командной строки
Код вызывающий программу (интерфейс для работы с разными программами): { int caesar = ui.key-&gt;value(); char *_fileWay =...

Передача аргументов командной строки
Здравствуйте. Подскажите пожалуйста, зачем в этом коде &quot;return 1;&quot;? #include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std;...

Передача аргументов командной строки функции main()
Добрый день Дана задача: Напишите программу, которая запрашивает пароль, задаваемый в команд- ной строке. Ваша программа не должна...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод Сайт называется reddit: The Thinkpad X220 Tablet is the best budget school laptop period. Это. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru