Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195

Передать строку типа string в system

18.07.2018, 01:21. Показов 7254. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Нужно реализовать функцию,которая бы передавала в system аргумент str (который ввел пользователь)
Хотел написать программу,которая бы выключала компьютер через определенное время
Пытался реализовать вот так:
C++
1
2
3
4
5
    string str = "shutdown \/s \/t ";
    int a;
    cin >> a;
    str += std::to_string(a);
    system(str);
Но в ответ получал лишь error C2664: "int system(const char *)": невозможно преобразовать аргумент 1 из "std::string" в "const char *"

Если я правильно понял,то system должна получать на вход константу.Нельзя ли как-нибудь обойти это ограничение?Или найти другой способ решения задачи (но обязательно через командную строку)
Буду благодарен за помощь!
P.S. не бейте палкой если написал бредятены)
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.07.2018, 01:21
Ответы с готовыми решениями:

Как скопировать строку типа std::string в другую строку такого же типа?
Хотел скопировать строку #include "stdafx.h" #include <iostream> #include <string> using namespace std; int _tmain(int...

Где и почему используют ту или иную строку std::string, char[], System::String^ ?
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните пожалуйста где нужно использовать...

Перевести строку типа string, в строку типа double
Помогите с кодом. Как строку типа стринг, например 123123.123123, перевести в тип double? Кода перевожу с помощью "atof" оно...

32
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 01:44
Лучший ответ Сообщение было отмечено Gaveyn как решение

Решение

C++
1
system(str.c_str());
2
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 09:59
Цитата Сообщение от Gaveyn Посмотреть сообщение
не бейте палкой
Палкой бить не буду, но пара шлепков, думаю, не повредит.
Тебе же чистым русским языком сказано
Цитата Сообщение от Gaveyn Посмотреть сообщение
int system(const char *)": невозможно преобразовать аргумент 1 из "std::string" в "const char *
Что это значит? Что system требует аргумента char *. Что можно узнать из любого справочника (или из интернета) по функции system. А вовсе не string. Значит твой str надо к этому типу преобразовать. Что и сделал уважаемый QuakerRUS,
1
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
18.07.2018, 11:38  [ТС]
Байт, QuakerRUS, Спасибо

Добавлено через 26 минут
Байт,
Не подскажете в чем тут проблема?
C++
1
2
3
4
5
6
string answ;
    system("cls");
    cout << "Введите имя диска,под которым подразумивается флешка: ";
    cin >> answ;
    answ += ":\\путь\\программа.exe";
    system(answ.c_str());
Нужна была функция которая запускала программу на флешке.Пишет "системе не удается найти указанный путь"
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 12:30
Gaveyn, возможно в пути или в имени файла у вас есть пробельные символы. Такой путь нужно заключать в кавычки, например так:

C++
1
2
3
4
5
string answ;
cout << "Введите имя диска,под которым подразумивается флешка: ";
cin >> answ;
answ = "\"" + answ + ":\\путь\\программа.exe\"";
system(answ.c_str());
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 12:33
Цитата Сообщение от Gaveyn Посмотреть сообщение
в чем тут проблема?
Когда запускается программа через system (или из командной строк), то пробелы воспринимаются как разделители параметров.
L:\My Path\prog.exe воспримется как вызов программы L:\My с параметром Path\prog\exe. Такой программы (L:\My) конечно нету
Чтобы этого не происходило, надо использовать кавычки.
Вообще в подобных случаях полезно напечатать строку, передаваемую функции system. Тогда и вам и нам станет многое более понятным.
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
18.07.2018, 13:19  [ТС]
Байт,
C++
1
2
3
4
5
6
7
    string answ;
    cout << "Введите имя диска,под которым подразумивается флешка: ";
    cin >> answ;
    answ ="\""+ answ + ":\\путь\\программа.exe"+ "\"";
    cout << answ << endl;
    system(answ.c_str());
    return 0;
На выходе
Миниатюры
Передать строку типа string в system  
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 13:31
Gaveyn, добавьте

C++
1
setlocale(LC_ALL, ""); // #include <clocale>
1
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
18.07.2018, 13:38  [ТС]
QuakerRUS, cпасибо
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 13:53
Gaveyn, что вы передаете в system? Не answ же!
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
18.07.2018, 14:58  [ТС]
Байт, а что?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
18.07.2018, 15:35
Цитата Сообщение от Gaveyn Посмотреть сообщение
cout << "Введите имя диска,под которым подразумивается флешка: ";

Цитата Сообщение от QuakerRUS Посмотреть сообщение
Gaveyn, добавьте
C++
1
setlocale(LC_ALL, ""); // #include <clocale>
А лучше отучайтесь использовать русские символы в путях к файлам. Хотя бы для отладки.
Цитата Сообщение от Gaveyn Посмотреть сообщение
На выходе
Не пробовали для отладки вхардкодить полный путь чтобы не ловить баги еще и с конкатенацией, экранированием и прочим? Ну хоть так system(""D:/program/program.exe"");
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 19:52
Цитата Сообщение от Gaveyn Посмотреть сообщение
Байт, а что?
Цитата Сообщение от Gaveyn Посмотреть сообщение
system(answ.c_str());
Вот то, что передаете, то и печатайте
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 19:58
Цитата Сообщение от Байт Посмотреть сообщение
Вот то, что передаете, то и печатайте
Там же нет отличий.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
18.07.2018, 20:02
хацкер в треде. Изучил функцию system, открыл для себя to_string - и можно идти писать крутой вирус!
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 20:03
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Там же нет отличий.
Как это???
Цитата Сообщение от Gaveyn Посмотреть сообщение
cout << answ << endl;
system(answ.c_str());
Неужели отличия вижу только я?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 20:05
Байт, результат то одинаковый будет.

Добавлено через 1 минуту
Байт, что так, что так.

C++
1
cout << answ << endl;
C++
1
cout << answ.c_str() << endl;
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.07.2018, 20:18
Цитата Сообщение от QuakerRUS Посмотреть сообщение
результат то одинаковый будет.
Результат-то - да. Но для полного выяснения ситуации этого мало. Я бы даже посоветовал отказаться от cout, ибо он сам себе на уме. Сам придумывает ФОРМАТЫ вывода в зависимости от аргумента. А вдруг c_str() чего напутает? В данном простейшем случае это может и не актуально. Хотя я в свое время вытер на плеши десяток волосков, пытаясь понять его работу.
Я бы сказал так
C++
1
2
printf("%s\n", answ.c_str());
system(answ.c_str());
Хотя ни в коем случае не так
C++
1
2
3
char *p = answ.c_str();
printf("%s\n", p);
system(p);
Это моя плешь запомнила хорошо.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
18.07.2018, 20:38
И вот так тоже не стоит. Потому что при изменении строки адрес СИ-строки может тоже измениться.
C++
1
2
3
char *p = answ.c_str();
cout << p << endl;
system(p);
Цитата Сообщение от Байт Посмотреть сообщение
Сам придумывает ФОРМАТЫ вывода в зависимости от аргумента.
Вот этой фразы не понял, как это он придумывает форматы? Можно пример?
0
99 / 98 / 11
Регистрация: 12.09.2016
Сообщений: 195
18.07.2018, 22:41  [ТС]
В этом году поступаю в Университет.Что-то мне подсказывает что там такого преподавать не будут)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2018, 22:41
Помогаю со студенческими работами здесь

Как совместить строку типа String, имеющуюся в коде и функцию, принимающую std::string ?
Доброго времен суток)) У меня такая проблема: есть строка типа String^ , а функция принимает string. Не знаю как их...

Как исправить E0144 значение типа "System::String ^" нельзя использовать для инициализации сущности типа
Как исправить E0144 значение типа &quot;System::String ^&quot; нельзя использовать для инициализации сущности типа ...

Преобразование типа string в System.IntPtr
Привет всем, как можно преобразование типа &quot;string&quot; в &quot;System.IntPtr&quot;. Я новенький в этом деле ещё и 1 недели не прошло как я перешел на...

Читать строку типа string из файла, разбить ее на массив слов типа char
Нужно сделать так что бы строчка вида &quot;&lt;слово1&gt;:&lt;слово2&gt;:&lt;слово3&gt;:&lt;слово4&gt;&quot; , считывалась и каждое слово заносилось в свою переменную....

Как преобразовать число типа int в строку типа string без методов-конвертов на C#?
В общем, все что выше написано. Пишу в Visual Studio на C#. Преобразовать без конвертирования, например, дано int, дано string, и это число...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru