2014-11-23 74 views
0

由於gets()(這是一個輸入到我的shell的命令),我有一個字符數組,例如「ls -l \ | sort」。現在我想要的是一個char ***,它將持有指向特定命令的指針(如此分割|)。以我的例子:將char數組解析爲*** char

*1[] = {"ls", "-l", "\", null} 
*2[] = {"sort", null} 

和我的char ***將是{1,2}。事情是,我不知道在這個字符數組中會給我多少個字符串,所以我不能預先定義這個字符串。我現在所擁有的僅僅是用空格將字符串分解爲單詞,而我無法弄清楚如何去做我實際需要的東西。

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

目前還不清楚你想要達到的目標。你如何從標準輸入讀取? – 2014-11-23 16:07:33

+0

將char()放入char line [1024]中,然後將此行變量傳遞給parse(char * line,char ** argv),其中argv爲空,並準備由此函數填充。 – user3885166 2014-11-23 16:09:05

+0

你想將一個字符串拆分成一個單詞數組? – 2014-11-23 16:09:56

回答

0
:到目前爲止

我的代碼

在我輸入

此外/功能上面的輸出應該在同一反應 「ls -l命令\ | |排序」 和 「之類的ls -l \」

要分割一條線,請使用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); 
}