我正在做一个shell(在C中)进行学校作业,我遇到了这个问题:我已经阅读了输入并且有一些单词。 (像这样:{" / bin / ls"," -l",">"," file"})我想要在特殊符号之间加上所有单词的子数组,例如'<&#;;'>',' |'。所以,如果我的输入是
/bin/ls -l > f.txt > /usr/bin/wc
我希望:
{{"bin/ls", "-l"}, {"f.txt"}, {"usr/bin/wc"}}
这样我就可以轻松地用正确的参数调用execv。
目前我有char ***,我几乎没有分配3个周期,然后从char **复制到char ***,而不是那么简单的算法。
有没有简单的方法将字符串数组拆分为字符串数组? (对我而言,将数组拆分为子串似乎是一项微不足道的任务,但C对我来说非常困难)
另外,我知道我可以在这些特殊符号处分割输入,然后在它们之间获取数组,但我对如何分割数组感兴趣。
答案 0 :(得分:0)
在C中,数组只不过是一块连续的内存块。你必须自己处理边界检查,所以你不妨这样做。换句话说,如果您有char **words
字[0]指向/bin/ls
,则字[1]指向-l
,字[2]指向>
等那么你已经拥有了你想要的东西。在实际代码中,您将使用char ***commands
并根据命令的数量动态调整大小,但对于简单的情况,您可以这样做:
char **first_command, **second_command, **third_command;
first_command = words;
second_command = words + 3;
third_command = words + 5;
现在first_command
指向数组{"/bin/ls", "-l"}
的第一个元素(因此它指向数组),second_command
指向数组{"f.txt"}
的第一个元素请注意,在此设置中first_command[2]
是一个数组外引用,但您需要跟踪边界。换句话说,不要复制周围的单词,只是跟踪它们的位置。