0

次の関数の目的を正確に把握しようとしましたか?

文字列を操作していることを理解しています-charポインターを取得する-コマンド、スペースまたはタブスペースがあるかどうかを確認します...しかし、最後に、この関数が何をしているのか理解できませんでしたか?

void FixCommand(char* command)
{
    char newCommand[MAX_COMMAND_SIZE + 1];
    char* currChar = command;
    int lastConfirmed = 0;
    int inputIndex = 0;
    while ((*currChar == ' ') || (*currChar == '\t'))
    {
        ++currChar;
    }
    while (*currChar != 0)
    {
        if (*currChar != '\n')
        {
            newCommand[inputIndex] = *currChar;
            ++inputIndex;
            if ((*currChar != ' ') && (*currChar != '\t'))
            {
                lastConfirmed = inputIndex;
            }
        }
        ++currChar;
    }
    newCommand[lastConfirmed] = 0;
    strcpy(command, newCommand);
}
4

1 に答える 1

1

プログラムは文字列の最初のスペース/タブをスキップし、commandすべての文字を にコピーしnewCommand[]て、「改行」\n文字をスキップします。また、command文字列内の区切り (スペースまたはタブ) を探し、最後に見つかった空白以外の文字を記録し、その位置をマークします。command最後に、最初の非ブランクから最後の非ブランクまでの部分が、command文字\nが削除されて にコピーされます。

たとえば、着信コマンド文字列が次のようになっているとします。

"    quick brown\nfox\tjumps over the\tlazy dog\t "

出力は次のようになります。

"quick brownfox\tjumps over the\tlazy dog"

\nその目的は、先頭/末尾の空白を許可しない外部システムにコマンド文字列を渡す前に、コマンド文字列を「サニタイズ」することです。

于 2013-03-29T11:29:53.443 に答える