我正在尝试实现一个基本终端(比如bash),我正在尝试接受用户输入(好像他们在bash中输入命令)并将每个空格拆分并将其放入向量中所以我可以从矢量中读取并逐个参加每个命令。 我似乎无法编译我的代码,我做错了什么? (这是我到目前为止所做的):
#include <iostream>
#include <cstring>
#include <vector>
#include <string>
using namespace std;
int main(){
vector<string> cmdline;
string command = "";
cout << '$';
getline(cin, command);
command.c_str();
char* tokchar;
tokchar = strtok(command, " ");
while(tokchar){
cmdline.push_back(tokchar);
tokchar = strtok(NULL, " ");
}
return 0;
}
具体来说,编译器错误是:无法将参数1的'std :: string'转换为'char *'为'char * strtok(char *,const char *)' 它说错误在我设置tokchar = ...;
的行上我不确定这段代码是否能满足我的要求。我如何修复它并将所有命令行参数放入由“”?
分隔的向量中答案 0 :(得分:0)
你正在使用的C ++类型的函数比C更具惯用性。考虑{C ++ boost::split
。
全部:
char* tokchar;
tokchar = strtok(command, " ");
while(tokchar){
cmdline.push_back(tokchar);
tokchar = strtok(NULL, " ");
}
可以通过以下方式替换(没有错误)
boost::split( cmdline, command, boost::is_any_of(" ") );