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(“”)看起来会更好。