WedX - журнал о программировании и компьютерных науках

Как объединить строку и перейти к вызову system()?

У меня есть немного кода, который я пытаюсь использовать, чтобы позволить пользователю вводить IP-адрес и пинговать его. Я просто делаю через функцию system() прямо сейчас. Моя проблема в том, что я не могу заставить функцию system() читать строку, а также переменную. Посмотрите здесь:

system("ping " + INPUT);

INPUT уже определен ранее как строка и содержит IP-адрес, который пользователь вводит в программу для проверки связи. Если я использую оператор +, Visual Studio выдает мне ошибку, потому что я использую математический оператор для двух строк. Какой оператор использовать для объединения содержимого двух разных строк?

c++
03.03.2014

  • system((std::string(ping) + INPUT).c_str()); 03.03.2014
  • ...и это не оператор И, это плюс. 03.03.2014

Ответы:


1

Проблема не в конкатенации строк. Дело в том, что для system требуется указатель на char, а не на std:: string. Итак, вам нужно что-то вроде

std::string s2 = "ping" + INPUT;
system(s2.c_str());
03.03.2014
  • Или просто system(("ping"+INPUT).c_str()) 03.03.2014
  • @Cramer Минимизация строк кода не всегда улучшает качество кода. 03.03.2014
  • @moooeeeep В этом случае есть проблемы с качеством кода? Просто знать. 25.12.2017

  • 2

    Когда/если вы делаете это очень часто, очевидный путь создания строки, то вызов system(your_string.c_str()); может несколько раздражать.

    Чтобы сделать такую ​​ситуацию несколько более приемлемой, я однажды написал этот код, который вы, возможно, захотите рассмотреть:

    исполняемый.hpp:

    #ifndef EXEC_HPP_INC_
    #define EXEC_HPP_INC_
    
    #include <sstream>
    #include <cstdlib>
    
    inline std::ostream &execute(std::ostream &s) {
        std::ostringstream &ss = dynamic_cast<std::ostringstream &>(s);
        std::system(ss.str().c_str());
        return s;
    }
    
    inline std::ostringstream &operator<<(std::ostringstream &s,
                              std::ostringstream &(*manip)(std::ostringstream &s))
    {
        return manip(s);
    }
    
    #endif
    

    Использование примерно такое:

    #include "exec.hpp"
    
    std::ostringstream x;
    
    x << "ping " << INPUT << execute;
    
    03.03.2014

    3

    система принимает указатель const char не строку. Вы можете добавить «INPUT» к команде ping и построить строку раньше.

    03.03.2014
    Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]