此方法采用一个 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/

10-13 06:29