由于gets()
(这是一个输入我的shell的命令),我有一系列字符,例如" ls -l \ |排序&#34 ;.现在我想拥有的是一个char ***,它将保存指向特定命令的指针(由|分割)。用我的例子:
*1[] = {"ls", "-l", "\", null}
*2[] = {"sort", null}
我的char ***将是{1,2}
。问题是,我不知道在这一系列角色中会给我多少串,所以我无法预定义。我现在所拥有的只是通过空格将字符数组分成单词,我无法弄清楚如何做我真正需要的事情。
同样在我的输入/输出上面,函数应该对" ls -l \ | sort"做出同样的反应。和" ls -l \ |排序"
到目前为止我的代码:
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;
}
答案 0 :(得分:0)
要分割一行,请使用strtok()
。您可以将此函数与|
一起用作分隔符,然后使用:
#include <string.h>
int parse(char *line, char **argv, const char *delim)
{
int word_counter = 0
/* get the first word */
char *word = strtok(line, delim);
/* walk through other words */
while (word != NULL)
{
printf(" %s\n", word);
word_counter++;
/* save word somewhere */
word = strtok(NULL, delim);
}
printf("This string contains %d words separated with %s\n",word_counter,delim);
}