2011-07-28 2 views
0

저는이 문제에 조금 어려움을 겪었습니다. 누군가가 잘못하고있는 것을 발견 할 수 있는지 궁금합니다. stdin에서 사용자 입력을 읽는 중, strtok()을 통해 입력 한 문자열을 분리하여 char * 배열에 저장하는 중입니다. char * 배열은 while 루프 밖에서 정의됩니다.루프가 배열을 삭제하는 동안? (C)

그래서 : 사용자가 stdin을 통해 입력을 입력하고 배열에 명령의 각 단어가있는 문자열이 채워집니다.

사용자가 단순히 입력을 누르는 경우 배열에 유지하려고합니다. 같은 값을 배열에 남기고 싶습니다. 그래서 같은 명령을 다시 실행할 수 있습니다. while 루프가 char * 배열을 지우고있는 것 같습니다. 여기에 코드가 있습니다 :

char *commands[3]; 
char *result = NULL; 
char delims[] = "  "; //a space AND a tab! 
while (1) { 

    printf(PROMPT); 

    //Gathers user input!   
    char *input; 
     char stuff[230]; 
     input = fgets(stuff, 230, stdin); 

    printf("input has length %i\n", strlen(input)); 
    int helper = strlen(input); 
    int i = 0; 

    result = strtok(input, delims); 
    printf("helper has length %i\n", helper); 
    printf("commands[0] CHECK 1:%s", commands[0]); 
    if (helper >1) 
    {   
     while(result != NULL) 
     { 
      printf("while gets hit!\n"); 
      if (i < 4) 
      {    
       commands[i] = result; 
        result = strtok(NULL, delims); 
       i++;  
      } 
     } 
    } 


    printf("commands[0] is CHECK 2:%s", commands[0]); 
    if (strncmp(commands[0], "step", 4) == 0) 
    { 
     lc3_step_one(p); 
    } 
    printf("commands[0] is CHECK 3:%s", commands[0]); 
}  

printf의 CHECK 1, CHECK 2 및 CHECK 3은 모두 사용자가 Enter 키를 누르면 아무 것도 인쇄하지 않습니다. 마지막으로 "스텝"을 입력 한 경우, "스텝"을 배열에 유지하고 다시 실행해야합니다.

+0

숙제 .......? –

+0

무엇을 의미합니까? 내가 취하는 수업을위한 프로젝트입니다. 문제 해결을 위해 내가 한 일. 실제로 코드에서이 현상을 멈추려는 시도한 메커니즘이 있습니다 ...하지만 원하는대로 작동하지 않습니다. – Phil

답변

2

명령 배열에 stuff 배열에 대한 포인터를 채 웁니다. 그 배열은 매번 fgets에 의해 덮어 쓰여지고 있습니다. 아마도 첫 문자를 null로 대체 할 것입니다. 데이터를 보존하려면 데이터를 복사해야합니다.

+0

'strdup'는 문자열 데이터를 복사하는 데 좋은 함수입니다. 문자열 포인터가 끝나면 문자열 포인터를'free'하십시오. –

관련 문제