此方法接受一个向量(inputVector,成员变量)并将其拆分为 char*[]。每当你遇到一个“;” 在向量中,打印出存储在 args 中的最后一组 char*s。即使向量大小为 14,循环也会在第 5 个循环中退出。
矢量数据(换行符分隔项目):
/bin/echo
killroy
在
这里;
;
xyzzy
;
不存在的程序
;
/bin/真
;
/bin/假
;
void TrivialShell::splitArguments() {
char* args[MAX_ARGS];
int inputVectorIdx = 0;
int currentArgsIdx = 0;
int startingArgsIdx = 0;
while (inputVectorIdx < inputVector.size()) {
if (inputVector[inputVectorIdx] == ";") {
for (int k = startingArgsIdx; k <= currentArgsIdx; k++) {
cout << args[k];
}
startingArgsIdx = currentArgsIdx + 1;
}
else {
args[currentArgsIdx] =
const_cast<char*>(inputVector[inputVectorIdx].c_str());
}
inputVectorIdx++;
currentArgsIdx++;
}
}