Могу ли я остановить Visual Studio URL-декодирование командных аргументов в режиме отладки? - PullRequest
0 голосов
/ 01 июля 2019

Если я установлю свою программу на вывод командных аргументов и запустлю ее в отладчике Visual Studio с аргументами команды «https% 3a% 2f% 2fas», то будет выведено «https://as'

Однако, если я запустюсь изкомандная строка 'myprog.exe https% 3a% 2f% 2fas', затем будет выведено 'https% 3a% 2f% 2fas'

Почему это обрабатывает по-разному, и как я могу остановить это?Я должен передать аргумент, который закодирован в URL-адресе, и он не должен сначала интерпретироваться Visual Studio.

Программа - это C ++, и это Visual Studio 2017, если это поможет.

1 Ответ

0 голосов
/ 02 июля 2019

Могу ли я остановить декодирование URL-адресов команды Visual Studio в режиме отладки?

Извините, но, боюсь, ответ отрицательный.Эта проблема существует после моего теста, и, насколько я знаю, в VS нет никакой опции, которая могла бы отключить или контролировать это поведение.Для этого я рекомендую, чтобы вы могли Go Help=>Send Feedback=>Report a problem in VS до сообщить об этой проблеме в команду продукта.

Мне нужно передать аргумент, закодированный в URL, и его не нужносначала интерпретируется Visual Studio.

И так как он хорошо работает в командной строке.Итак, вам нужно получить строку формата UrlEncode во время VS debug process в вашей разработке.Для этого вы можете попробовать:

1 . Добавить код перед тем, как вам нужен реальный аргумент для UrlEncode argv[1] (я думаю, что это https://as).О том, как сделать UrlEncode, см. эту проблему .

2 . Установите аргумент таким образом, установите https% 3a% 2f% 2fas как argv[1] вместо https%3a%2f%2fasв свойствах проекта добавьте код, чтобы определить, содержит ли он пробел, if true => напишите код, чтобы удалить пробел в нем и получить новую нужную строку (https%3a%2f%2fas)

3 . Настройте свой собственный файл аргумента:

1 # В vs щелкните правой кнопкой мыши проект => добавьте файл Text.txt в проект.

2 # Задайте единственный аргумент в этомas Text.txt.

enter image description here

Тогда содержимое вашего Text.txt является набором ваших пользовательских аргументов.Например:

В строке 1 файла Text.txt https%3a%2f%2fas, строке 2 test, строке 3 ...

enter image description here

3 # Затем вы можете использовать код, подобный следующему:

#include "pch.h"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream infile(argv[1]); //open the file

    string MyArgus[10]; //create my alternative argus
    MyArgus[0] = argv[0]; //let the first argu of Myargus=original vs argu[0]
    if (infile.is_open() && infile.good()) {
        cout << "File is open."<<endl;
        string line = "";

        int num = 1;
        while (getline(infile, line)) {
            MyArgus[num] = line;
            num++;
        }
    }
    else {
        cout << "Failed to open file..";
    }

    cout << MyArgus[0]<<endl; // projectName.exe always
    cout << MyArgus[1]<<endl; // https%3a%2f%2fas
    cout << MyArgus[2]<<endl; // test
    return 0;
}

Таким образом, вы можете записать аргументы таким образом в файл Text.txt, чтобы установить свои собственные аргументы, чтобы избежать автоматического UrlDecode в VS.

Надеюсь, это поможет:)

...