Пока Loop очищает мой массив? (С) - PullRequest
0 голосов
/ 29 июля 2011

Я немного усердно занимался этой проблемой, и мне интересно, сможет ли кто-нибудь понять, что я делаю неправильно. Я читаю пользовательский ввод из stdin, разбиваю строку, которую они вводят через strtok (), и сохраняю ее в массив char *. Массив char * определяется вне цикла while.

Итак: пользователь вводит данные через stdin, а массив заполняется строками с каждым словом из команды.

Дело в том, что если пользователь просто нажимает Enter, я хочу, чтобы массив ОБЕСПЕЧИЛ, что это значение! Я хочу, чтобы в массиве остались одни и те же значения ... чтобы я мог выполнить ту же команду. Похоже, что цикл 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]);
}      

CHECK 1, CHECK 2 и CHECK 3 в printf ничего не печатают, если пользователь нажимает ввод. В случае, если они в последний раз набрали «step», я хочу, чтобы «step» оставался в массиве и, таким образом, выполнялся снова!

1 Ответ

2 голосов
/ 29 июля 2011

Вы заполняете массив команд указателями на массив вещи.Этот массив каждый раз перезаписывается fgets (возможно, заменяя первый символ на ноль).Вам нужно будет скопировать данные, чтобы сохранить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...