Сформировать строку для cURL из аргументов

220
05 декабря 2017, 21:28

Строка для curl -> char* Делаю так:

int main(int argc, char *argv[]) {
    char* host;
    int port;
    cout << argv[0]; // имя программы 
    for (int i = 1; i < argc; i++) { // начинаем с 1, пропуская имя программы
        if (i + 1 != argc) {
            if (argv[i] == "--host") { // встретили параметр host
                host = argv[i + 1];  // строка
            } else if (argv[i] == "--port") { // параметр port
                port = atol(argv[i + 1]); // int
            }
        }
    }
    CURL *curl;
    CURLcode result;
    string url_from_arguments;
    url_from_arguments="http://www.myserver.ru/?port="+to_string(port)+"&host="+host;
    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, url_from_argumets.c_str());
}

если вывести:

cout << url_from_arguments;

выходят кракозябры, но строки вроде как добавляются

Как исправить создание ссылки из параметров?

Answer 1

argv[i] == "--host" сравнивает два указателя, а не строки, на которые они указывают. В результате неинициализированный указатель host так и остается неинициализированным, а его разименование приводит к неопределенному поведению. Инициализируйте

char * host{};

используйте специальную функцию сравнения строк

if(0 == strcmp("--host", argv[i]))

и не забудьте проверить, что host стал не нулевым.

READ ALSO
Создание процесса

Создание процесса

Под Windows есть функция создания нового процесса CreateProcess которая создает процесс в новом окне, и в нее можно передать флаг CREATE_NO_WINDOW, что бы это...

211
QLineEdit. Ввод с виртуальной клавиатуры

QLineEdit. Ввод с виртуальной клавиатуры

При использовании QLineEdit в приложении под андоид (Qt 57, Android 6

220
Обрубка русского текста

Обрубка русского текста

Пытаюсь вывести предложение с указанным искомым словом, но программа не выводит полностью всё предложение, а лишь часть текста

222