|
123
36 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 221
|
||||||
Error: 'system' was not declared in this scope24.09.2019, 11:47. Показов 10903. Ответов 68
Метки нет (Все метки)
Как я понял параметры argv[] это консольные команды которые добавляются к имени файла в командой строке.
Можно ли способом описаным у меня ниже назначить команде определенные действия при вызове программы с этой командой?
Мне нужно чтобы программа не выключалась после работы. В делфи для этого использовал read;. А как без system(pause) или каким-то другим способом оставить программу после выполнения? Если че язык С++ не знаю вобще, только изучаю и многое непонятно -_-. Добавлено через 6 минут Проблема с pause решена. Натупил по невнимательности. Там ниже кода вообще бред написан. Добавлено через 1 минуту А нет всетаки пишет: error: 'system' was not declared in this scope
0
|
||||||
| 24.09.2019, 11:47 | |
|
Ответы с готовыми решениями:
68
Не компилируется приложение: 'system' was not declared in this scope
|
|
"C with Classes"
|
||||
| 24.09.2019, 16:37 | ||||
|
Добавлено через 1 минуту Добавлено через 1 минуту
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 24.09.2019, 18:24 | ||||||
|
1. родительский процесс запускает дочерний. и здесь важно не забывать записывать путь к модулю в нулевой аргумент дочернего процесса. 2. дочерний процесс был запущен из под родительского. и здесь важно понимать: не факт, что нулевой аргумент хранит путь к модулю. и что бы не полагаться на корректность вызывающей стороны, нужно использовать специализированное апи. писать грамотно, или зависеть от прихоти "маловероятных событий". можно писать чушь. можно акцентрировать на этом внимание. дабы не ввели ЕГО в заблуждение бесы-балбесы. который гарантирует мне безопасность. а вообще аналогия не уместна. программный код либо инвариантен, либо нет. Добавлено через 22 минуты например, нужно запустить программу. казалось бы, фигня делов: CreateProcess(path2programm, params, ...);и всё, приплыли. все аргументы смещены влево. нулевой аргумент хранит не путь к модулю, а первый аргумент командной строки. в моей практике был один случай, когда один паренёк будучи ещё новичком, запустил вот так одну консольную утилиту. утилита полезла в базу данных, и слегка набедокурила.
1
|
||||||
|
123
36 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 221
|
||||||
| 25.09.2019, 02:34 [ТС] | ||||||
|
Ну вот у меня работает только если
Получается в первой строке массива уже чтото есть. Только с начиная с 1. Все что хотел узнать узнал. Всем спасибо ^^.
0
|
||||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
||||||||
| 25.09.2019, 10:44 | ||||||||
|
И даже так - это актуально только для многопоточных программ, даже прогопроцессных, что совсем редкость. Не по теме:
Так и тут: сначала надо изучить синтаксис и конструкции языка, и только потом переходить к тонкостям и исключениям. Тем более, что именно та область, в которой подобная экзотика встречается, может никогда и не понадобиться ТСу. system("format C:"); вызвали а потом удивлялись "а чего это все поломалось".
0
|
||||||||
|
1673 / 501 / 107
Регистрация: 17.05.2015
Сообщений: 1,519
|
|
| 25.09.2019, 17:34 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||
| 25.09.2019, 19:08 | ||||||||||||
|
и не знаком с особенностями winapi. но скажи, какое именно слово в этом предложении оказалось тебе не понятным? если мои речи тебе кажутся слишком сложными для понимания, почитай документацию если я тебя правильно понял. system редко используется,просто потому, что у неё функционал слишком бедный. она бесполезна даже для самых типичных задач. пример типичной задачи: есть родительский процесс (gui приложение) из под него нужно запустить дочерний процесс. какую нибудь консольную утилиту. при этом утилита запускается без консольного окна. необходимо дождаться окончания работы утилиты. получить код возврата, и заграбастать весь её вывод (stdout/stderr) теперь покажи, как ты это сможешь оформить "в виде потоков", или при помощи system. что ей впаривают. инвариант? не, не слышал. это - нормальный случай. худший бывает либо у новичков, либо у худших программистов. потому что это удобно. особенно, когда читаешь с телефона. не нужно скролить влево-вправо. ты мне картинку одну сейчас напомнил: "нечего сказать - докалебусь до орфографии" лично мне всё равно, кто как пишет по-русски: "докалебаться до орфографии", "докалебатся до орфографии", или даже: "докалебаццо до орфографии". если при этом не искажается смысл сообщения. поэтому, если я докалёбывюсь, то докалёбываюсь всегда до смысла. докалёбываццо до орфографии - это убого. за нитью беседы следишь? выше ты утверждал: если не куришь нюансы. и вот нахера ты теперь начал загонять про удивление? именно поэтому и возникло понятие "инварианта". только вот сама эта метрика не зависит от скорости разработки. годный программист успевает решать задачи за поставленное время. и при этом он выдаёт качество. плохому программисту
0
|
||||||||||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||||||||||||||||||
| 26.09.2019, 14:06 | |||||||||||||||||||
|
Неужели для вас настолько сложна концепция следования стандартам, даже если требует лишних телодвижений?
cat. Она ждет имена файлов, и не может отследить что первый аргумент ей передают в argv[0].С чего я и начал: если ты неправильно вызываешь программу, она имеет полное право работать не так как ты ожидаешь. Не по теме:
Добавлено через 4 часа 25 минут
1
|
|||||||||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||||||||||||||||||
| 26.09.2019, 15:35 | |||||||||||||||||||
|
Создаст, например, ссылку для запуска и в argv[0] начнет приходить имя этой ссылки, а не "имя исполняемого файла". Или, запуская из консоли вашу программу как
1
|
|||||||||||||||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 26.09.2019, 17:21 | |
|
hoggy, Есть такая вешь - BusyBox.
Допустим вам надо найти строчку "rm" в "очень_важный_файл" Вы, описанным вами способом (со съехавшим на одну позицию argv), запускаете "grep rm очень_важный_файл". Что произойдет? И кто в этом виноват - вы или разработчики BusyBox?
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||
| 26.09.2019, 17:35 | |||
|
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||||
| 26.09.2019, 19:45 | ||||
|
Речь шла a.exe, то ожидать, что в argv[0] всегда (c) будет приходить a.exe - не верно. Только об этом.
0
|
||||
|
"C with Classes"
|
|
| 27.09.2019, 04:42 | |
|
0
|
|
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||
| 27.09.2019, 10:05 | |||
printf("usage: %s [input] -o [output] [flags]\n", argv[0]);, а здесь вообще не важно полный путь, относительный. Даже ошибки hoggy не будут критичными.Для такого применения argv[0] в виде команды вызова - то что надо.
0
|
|||
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
||||
| 27.09.2019, 11:51 | ||||
|
есть стандарт языка http://www.open-std.org/jtc1/s... /n4296.pdf 3.6.1 Main function
0
|
||||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|
| 27.09.2019, 11:59 | |
|
0
|
|
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
|
| 27.09.2019, 12:06 | |
|
Не по теме: тогда вообще не пойму кто тут за красных, а кто за белых ![]()
1
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
|||
| 27.09.2019, 14:11 | |||
Ну так допустим, что путь к модулю лежит в PATH, соответственно вызов может не содержать этот путь. Или вызов может идти через ссылку, которая лежит в другом месте, относительно самого модуля. Оба случая не зависят ни от кого, кроме пользователя системы, т.е. извращений программиста как бы и нет. Если же в программе нужен именно путь или именно оригинальное имя модуля, то расчет на argv[0] можно считать неоправданным. По-моему Хогги именно про это и говорил. Нет?
0
|
|||
|
4087 / 2685 / 432
Регистрация: 09.09.2017
Сообщений: 11,941
|
|||||
| 27.09.2019, 14:47 | |||||
|
argv[0] содержит имя, по которому исполняемый файл вызван. Вызов
system(argv[0]); позволяет запустить тот же самый бинарник.При желании это соглашение можно нарушить и передать в argv[0] произвольную строку - но это будет именно нарушением соглашения и для этого нужны веские причины. Дальше создаем мягкую ссылку prog_soft. Пока об оригинальном имени говорить еще можно, хотя и со скрипом. С одной стороны очевидно, что мягкая ссылка вторична по отношению к оригиналу, с другой - пользователь сознательно изменил имя программы (полный путь). Наверное, ему это зачем-то надо. А теперь создем жесткую ссылку prog_hard. Какое из имен теперь "оригинальное"? Жесткая ссылка это просто другое имя того же файла. realpath никто, вроде, не отменял...
0
|
|||||
|
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
|
|||
| 27.09.2019, 14:57 | |||
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,822
|
||||||||||||||
| 27.09.2019, 15:31 | ||||||||||||||
|
COKPOWEHEU, из вашего ответа стало понятно, что вы спорите с вами же самим придуманными утверждениями
![]() Вот например: Далее: Вот опять: И вот снова.
В любом случае здесь надо знать, что в argv[0] может прийти не то имя, которым называется исполняемый файл. Добавлено через 13 минут prog и лежит она в каталоге /opt/3rd_party/bin, который юзер добавил в PATH.Далее он в консоли вызывает вашу программу как
argv[0]? Правильно prog и получит. Что вернет realpath для строки prog? Правильно, NULL вернет. А все потому, что в строке prog нет пути к /opt/3rd_party/bin/prog, ни относительного, ни абсолютного, никакого.Добавлено через 1 минуту Теперь возвращаемся к цитате:
0
|
||||||||||||||
| 27.09.2019, 15:31 | |
|
Помогаю со студенческими работами здесь
40
[Error] 'm' was not declared in this scope [Error] 'k' was not declared in this scope [Error] 'If' was not declared in this scope Ошибка: [Error] 'x' was not declared in this scope
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|