此方法采用一个 vector (inputVector,成员变量)并将其拆分为char * []的。每当您遇到“;”在 vector 中,打印出存储在args中的最后一组char * s。即使 vector 大小为14,循环也会在第5个循环中退出。
vector 数据(换行符分隔项目):
/ bin /回声
Killroy
原为
这里;
;
y
;
不存在的程序
;
/ bin / true
;
/ bin / false
;
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++;
}
}
最佳答案
for (int k = startingArgsIdx; k < currentArgsIdx; k++) {
// ^^
cout << args[k];
}
您试图打印太多。您尚未说过,但我相信它不仅会跳过循环,还会退出程序。
关于c++ - C++程序在条件为假之前退出循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15960716/