2014-11-23 2 views
0

"ls -l \ | sort"와 같이 gets() (셸에 입력 된 명령)의 결과로 char 배열이 있습니다. 이제 내가 갖고 싶은 것은 특정 명령에 대한 포인터를 보유 할 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

. stdin에서 어떻게 읽습니까? –

+0

gets()를 char 라인 [1024]에 넣고이 라인 변수를 parse (char * line, char ** argv)로 전달합니다. 여기서 argv는 비어있어이 함수로 채울 준비가되었습니다. – user3885166

+0

문자열을 단어 배열로 분할하고 싶습니까? –

답변

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); 
} 
관련 문제