【发布时间】:2014-11-23 15:29:45
【问题描述】:
gets()(这是一个输入到我的 shell 的命令)的结果,我有一个字符数组,例如“ls -l \ | sort”。现在我想要的是一个 char***,它可以保存指向特定命令的指针(所以用 | 分割)。以我为例:
*1[] = {"ls", "-l", "\", null}
*2[] = {"sort", null}
而我的 char*** 将是 {1,2}。问题是,我不知道在这个字符数组中会给我多少个字符串,所以我无法预先定义。我现在所拥有的只是通过空格将字符数组拆分为单词,我无法弄清楚如何做我真正需要的。
在我上面的输入/输出中,函数应该对“ls -l \|sort”和“ls -l \|sort”做出相同的反应
到目前为止我的代码:
int parse(char *line, char **argv)
{
while (*line != '\0') {
while (*line == ' ' || *line == '\t' || *line == '\n')
*line++ = '\0';
*argv++ = line;
while (*line != '\0' && *line != ' ' && *line != '\t' && *line != '\n'){
line++;
}
}
*argv = '\0';
return 0;
}
【问题讨论】:
-
不清楚你想要达到什么。你如何从标准输入读取?
-
用gets() 到char line[1024] 然后这个line 变量被传递给parse(char *line, char **argv),其中argv 是空的并且准备被这个函数填充.
-
你想把一个字符串拆分成一个单词数组吗?
-
不完全是 - 我想要 n+1 个单词数组用于 n "|"人物。所以 "ls -l \ | sort" 会产生 2 个数组,一个是 {"ls", "-l", "\", null},第二个是 {"sort", null}
标签: c arrays shell parsing char