我从未想过我会使用三重指针。这需要一些解释,所以请耐心等待。
我正在尝试用c ++实现Unix命令提示符。我能够通过直接将用户输入行读入char command[256]
来获取一个读取基本命令的程序,然后解析command
,以便另一个数组char *parsedCommand[100]
包含指向每个“单词”的指针。 command
。
因此,例如,如果用户输入了命令cd Desktop
,那么parsedCommand
将包含两个元素,即cd
和Desktop
。
但现在我需要在命令提示符下考虑多个|
运算符和/或>>
运算符。这使我决定使用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++;
}
我想这不起作用,因为它会更改indiCommand
和parsedCommand
上的指针值,或者不会移动parsedCommand
的迭代器。
这里的任何提示和提示都会非常感激。