将字符数组解析为*** char

时间:2014-11-23 15:29:45

标签: c arrays shell parsing char

由于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; 
}

1 个答案:

答案 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);
}