2016-02-18 4 views
0

Я пишу функцию для чтения ввода символов, которая должна потреблять ведущие белые пробелы, прежде чем она начнет обращать внимание на остальную введенную строку. Я успешно прочитал ведущие символы пробела ввода, если они существуют. Но для жизни меня я не могу понять, когда получаю seg-ошибки, когда пытаюсь прочитать остальную часть строки. Я использую ANSI C. Вот мой код:Чтение ввода в массив с использованием getchar() в c

void readCharLine(char **line_address) { 
     int c; 
     int index = 0; 
     *line_address = malloc(35 * sizeof(char)); 
     c = getchar(); 

     /*Consume white spaces*/ 
     while ((c == ' ') && (index < 35)) { 
      c = getchar(); 
      index++; 
     } 

     c = getchar(); 

     /*read rest of line*/ 
     while(c != '\n') { 
      *line_address[index] = c; 
      c = getchar(); 
      index++; 
     } 
    } 

Я называю readCharLine следующим образом:

readCharLine(&node -> input); 

где узел объявляется структура выглядит следующим образом:

/*Node declaration*/ 
    typedef struct { 
     char *input; 
     struct Node *next; 
    } Node; 

Спасибо!

+0

Обратите внимание, что вы выбрасываете первый (возможно, только) непустой символ. Вам также необходимо проверить EOF (вы используете 'int c;' что хорошо - это позволяет вам надежно проверять EOF). Вы можете посмотреть '' и 'isspace()' или 'isblank()'. –

+0

[исправить образец] (http://ideone.com/P9R8sD) – BLUEPIXY

ответ

1

Ваши прирастания index даже для символов, которые вы отбрасываете, так что, возможно, вы сбрасываете конец массива.

Возможно, вы также захотите while(c != '\n') { быть while(index < 35 && c != '\n') { - отрегулировать по мере необходимости, в зависимости от того, нужно ли вам оканчивать строку.

Смежные вопросы