C将字符串数组拆分为子数组

C将字符串数组拆分为子数组,c,arrays,string,split,C,Arrays,String,Split,我正在为学校作业做一个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

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


另外,我知道我可以在这些特殊符号处分割输入,然后得到它们之间的数组,但我有点感兴趣的是如何通过分割数组来实现。

在C中,数组只不过是一个连续的内存块。你必须自己处理边界检查,所以你最好这样做。换句话说,如果你有
char**words
,其中words[0]指向
/bin/ls
,words[1]指向
-l
,words[2]指向
,等等,那么你已经拥有了你想要的东西。在实际代码中,您可以使用
char***命令
,并根据命令的数量动态调整大小,但对于简单的情况,您可以执行以下操作:

char **first_command, **second_command, **third_command;
first_command = words;
second_command = words + 3;
third_command = words + 5;

现在
first_命令
指向数组的第一个元素
{/bin/ls”,“-l”}
(因此它指向数组),
second_命令
指向数组的第一个元素
{“f.txt”}
,等等。请注意,在此设置中
first_命令[2]
是一个数组外引用,但是你需要跟踪边界。换句话说,不要到处复制单词,只需跟踪它们的位置。

查看
strep
索引和/或
strchr
函数以帮助完成此操作。在C语言中没有标准的方法来实现这种拆分,但是实现起来非常简单。