所以现在我有一个
int main (int argc, char *argv[]){}
如何使它基于字符串? int main (int argc, std::string *argv[])
会不够?
答案 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中。