Как получить std :: string из аргументов командной строки в приложении win32? - PullRequest
5 голосов
/ 09 ноября 2010

Так что теперь у меня есть

int main (int argc, char *argv[]){}

как сделать это на основе строк?int main (int argc, std::string *argv[]) будет достаточно?

Ответы [ 6 ]

26 голосов
/ 09 ноября 2010

Вы не можете изменить подпись main, поэтому это ваша лучшая ставка:

#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> params(argv, argv+argc);
    // ...
    return 0;
}
4 голосов
/ 09 ноября 2010

Если вы хотите создать строку из переданных входных параметров, вы также можете добавьте указатели символов, чтобы создать строку самостоятельно

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{

string passedValue;
for(int i = 1; i < argc; i++)
 passedValue += argv[i];
    // ...
    return 0;
}
3 голосов
/ 09 ноября 2010

Это было бы нестандартно, потому что Стандарт в 3.6.1 говорит

Реализация не должна предопределять основную функцию. Эта функция не должна быть перегружена. Он должен иметь тип возвращаемого значения типа int , но в остальном его тип определяется реализацией. Все реализации должны позволять оба следующих определения main:

int main() { /* ... */ }

и

int main(int argc, char* argv[]) { /* ... */ }

3 голосов
/ 09 ноября 2010

Вы не можете сделать это таким образом, так как основная функция объявлена ​​явно, так как она является точкой входа.Обратите внимание, что ЭЛТ ничего не знает о STL, так что в любом случае будет недоволен.Попробуйте:

#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> args;
    for(int i(0); i < argc; ++i)
        args.push_back(argv[i]);

    // ...

    return(0);
}; // eo main
2 голосов
/ 09 ноября 2010

основной получает символ *.вам придется самостоятельно поместить массив argv в std :: strings.

2 голосов
/ 09 ноября 2010

Нет. Это не разрешено. Если он присутствует, он должен быть char * argv [].

Кстати, в C ++ main всегда должно объявляться как возвращающее 'int'

...