2

このメソッドは、ベクトル (inputVector、メンバー変数) を受け取り、それを char*[] に分割します。「;」に出くわすたびに ベクトルで、args に格納されている char* の最後のセットを出力します。ベクトルのサイズは 14 ですが、ループは 5 番目のループで終了します。

ベクター データ (改行で項目を区切ります):
/bin/echo
killroy
was
here;
;
xyzzy
;
存在しないプログラム
;
/ビン/真
;
/ビン/偽
;

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++;
    }
}
4

2 に答える 2

1
for (int k = startingArgsIdx; k < currentArgsIdx; k++) {
 //                             ^^
                cout << args[k];
}

印刷しすぎています。あなたはそれを言っていませんが、ループをスキップするだけでなく、プログラムを終了すると確信しています。

于 2013-04-11T23:51:26.753 に答える