如何从win32应用程序中的命令行参数获取std :: string?

时间:2010-11-09 14:49:53

标签: c++ string command-line arguments std

所以现在我有一个

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

如何使它基于字符串? int main (int argc, std::string *argv[])会不够?

6 个答案:

答案 0 :(得分:26)

你无法改变主要的签名,所以这是你最好的选择:

#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> params(argv, argv+argc);
    // ...
    return 0;
}

答案 1 :(得分:4)

如果要从传递的输入参数中创建字符串,也可以 添加字符指针以自己创建一个字符串

#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;
}

答案 2 :(得分:3)

你不能那样做,因为main函数是明确声明的,因为它是一个入口点。请注意,CRT对STL一无所知,所以无论如何都要barf。尝试:

#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

答案 3 :(得分:3)

这是非标准的,因为3.6.1中的标准说

  

实现不应预定义主函数。此功能不应重载。它的返回类型应为int ,但其类型是实现定义的。所有实现都应允许以下两个主要定义:

     

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

     

     

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

答案 4 :(得分:2)

没有。这是不允许的。如果存在,则强制要求为char * argv []。

顺便说一句,在C ++中,main应该总是被声明为返回'int'

答案 5 :(得分:2)

main接收char *。你必须自己把argv数组放到std :: strings中。