【发布时间】:2011-05-07 07:21:07
【问题描述】:
所以现在我有一个
int main (int argc, char *argv[]){}
如何使它基于字符串? int main (int argc, std::string *argv[]) 够吗?
【问题讨论】:
标签: c++ string command-line arguments std
所以现在我有一个
int main (int argc, char *argv[]){}
如何使它基于字符串? int main (int argc, std::string *argv[]) 够吗?
【问题讨论】:
标签: c++ string command-line arguments std
没有。这是不允许的。如果存在,则强制为 char *argv[]。
顺便说一句,在 C++ 中 main 应始终声明为返回 'int'
【讨论】:
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
【讨论】:
那将是非标准的,因为3.6.1 中的标准说
实现不应预定义主要功能。此函数不得重载。它的返回类型应该是 int 类型,否则它的类型是实现定义的。所有实现都应允许以下两种 main 定义:
int main() { /* ... */ }和
int main(int argc, char* argv[]) { /* ... */ }
【讨论】:
;-)
你不能改变 main 的签名,所以这是你最好的选择:
#include <string>
#include <vector>
int main(int argc, char* argv[])
{
std::vector<std::string> params(argv, argv+argc);
// ...
return 0;
}
【讨论】:
+1 来自我,虽然通常你想要argv+1, argv+argc(因为argv+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;
}
【讨论】:
+=”会将它们混合在一起。 passedValue.append(argv[i]).append(" ") 会更好看。