このメソッドは、ベクトル (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++;
}
}