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

C++ 如何在win32应用程序中从命令行参数获取std::string?,c++,string,command-line,arguments,std,C++,String,Command Line,Arguments,Std,所以现在我有一个 intmain(intargc,char*argv[]){} 如何使其基于字符串?intmain(intargc,std::string*argv[])是否足够?否。这是不允许的。如果存在,则强制为char*argv[] ,在C++中,main应该总是声明为返回“int”/p> main接收char *。您必须自己将argv数组放入std::strings中。您不能这样做,因为main函数是作为入口点显式声明的。请注意,CRT对STL一无所知,因此无论如何都会呕吐。尝试: #i

所以现在我有一个

intmain(intargc,char*argv[]){}


如何使其基于字符串?
intmain(intargc,std::string*argv[])是否足够?
否。这是不允许的。如果存在,则强制为char*argv[]


,在C++中,main应该总是声明为返回“int”/p> main接收char *。您必须自己将argv数组放入std::strings中。

您不能这样做,因为main函数是作为入口点显式声明的。请注意,CRT对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
#包括
#包括
int main(int argc,char*argv[])
{
std::向量args;
for(int i(0);i
这将是非标准的,因为
3.6.1
中的标准

实现不应预定义主要功能。此功能不应过载。它的返回类型应为int,否则其类型由实现定义。所有实施均应允许以下两种定义:

int main(){/*…*/}

intmain(intargc,char*argv[]){/*…*/}


您无法更改main的签名,因此这是您的最佳选择:

#include <string>
#include <vector>

int main(int argc, char* argv[])
{
    std::vector<std::string> params(argv, argv+argc);
    // ...
    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
std::向量参数(argv,argv+argc);
// ...
返回0;
}

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

#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;
}
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
字符串passedValue;
对于(int i=1;i
main不传递任何内容。相反,main由CRTvow传递char*。与i(0)语法+1类似,因为您知道结果向量的大小,所以可以使用向量的大小构造函数进行预分配,避免使用.push_back()进行多次重新分配。您也可以使用vector的迭代器构造函数来避免自己编写循环。@luke,是的,我看到了您的响应,并对其进行了+1处理,因为它比我的要干净得多。@Chubsdad:我使用Foxit
;-)
Yep,
+1
来自我,虽然通常你想要
argv+1,argv+argc
(因为
argv+0
是应用程序名)。@sbi,是的-记住这一点很重要,但我试图保持简单:“
+=
”会将它们混合在一起
passedValue.append(argv[i])。append(“”)看起来会更好。