指针 - 重新初始化* char []而不影响指向它的** char []

时间:2016-04-08 14:02:09

标签: c++ pointers

我从未想过我会使用三重指针。这需要一些解释,所以请耐心等待。

我正在尝试用c ++实现Unix命令提示符。我能够通过直接将用户输入行读入char command[256]来获取一个读取基本命令的程序,然后解析command,以便另一个数组char *parsedCommand[100]包含指向每个“单词”的指针。 command

因此,例如,如果用户输入了命令cd Desktop,那么parsedCommand将包含两个元素,即cdDesktop

但现在我需要在命令提示符下考虑多个|运算符和/或>>运算符。这使我决定使用char **indiCommand[55]指向由这些运算符分隔的每个命令。

以下是使用**indiCommand进行命令解析但尚未实现|>>检查的代码(所以这段代码基本上就是我之前的代码,对于简单的工作来说效果很好命令):

void parseCommand(char command[], char **indiCommand[], int & nCommands, bool & oRedirect) {
    nCommands = 1;
    char *parsedCommand[100];

    //reading the entire command line until its end
    while (*command != '\0') {

        //set all white space to end-of-string character, 
            //so that each cstring pointed to by *parsedCommand[] will contain only one word
        while (*command == ' ' || *command == '\t' || *command == '\n') {
            *command = '\0';
            command++;
        }


        //set *parsedCommand[]'s current iterator to the next word of the command line, and advance both iterators

        *parsedCommand = command;
        parsedCommand++;
        while (*command != '\0' && *command != ' ' && *command != '\t' && *command != '\n') {
            command++;
        }

    }

    //end pointer arrays with an end-of-string character
    *parsedCommand = '\0';
    *indiCommand = parsedCommand[0]
    indiCommand++;
    *indiCommand = '\0';
}

这是我尝试处理>>检查:

    if (*command == '>' && *command+1 == '>') {
        *parsedCommand = '\0';
        *indiCommand = parsedCommand[0]
        indiCommand++;
        command = command+2;
        *parsedCommand[0] = command;

        oRedirect = true;
        nCommands++;
    }

我想这不起作用,因为它会更改indiCommandparsedCommand上的指针值,或者不会移动parsedCommand的迭代器。

这里的任何提示和提示都会非常感激。

0 个答案:

没有答案