我正在为我的实验室制作一个新的应用程序,我必须在表单终端中使用一些参数,并且我想将**args值复制到一个字符串中,之后我必须匹配argsfor执行一些前戏操作.
我尝试构建此代码以将**argv值复制到字符串var中,但这是错误:
No source available for "std::string::operator=() at 0x44c1dc"
Run Code Online (Sandbox Code Playgroud)
代码是这样的:
int main(int argc, char **argv)
{
string args[argc-1];
int j=0;
for(int i=2; i<argc-1;i++)
{
j=0;
while(argv[i][j]!='\0')
{
args[i]=args[i]+argv[i][j];
j++;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我会建议这个解决方案:
std::vector<std::string> args;
std::copy(argv + 1, argv + argc, std::back_inserter(args));
Run Code Online (Sandbox Code Playgroud)
参考文献:
为了解释一下,这个副本argv[1](我不关心argv[0]它是"命令",通常与参数处理无关)到向量中.我们停止复制argv[argc]超出实际参数末尾的复制(这是"结束"迭代器的工作方式).
std::back_inserter 创建一个特殊的迭代器,用于在容器的末尾插入广告.
使用范围构造器的最快和最短的解决方案:
std::vector<std::string> args(argv + 1,argv + argc);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5535 次 |
| 最近记录: |