0

我正在为学校作业做一个 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 让我很难)

另外,我知道我可以在这些特殊符号处拆分输入,然后在它们之间获取数组,但我对如何拆分数组很感兴趣。

4

1 回答 1

0

在 C 中,数组只不过是一块连续的内存。您必须自己处理边界检查,所以您不妨这样做。换句话说,如果你有char **wordswhere words[0] 指向/bin/ls, words[1] 指向-l, words[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]中是一个数组外引用,但您需要跟踪的界限。换句话说,不要到处复制单词,只需跟踪它们的位置即可。

于 2013-05-21T12:28:50.877 回答