Пропустить пробел и вернуть по одному слову за раз - PullRequest
5 голосов
/ 24 октября 2010

Этот код должен пропускать пробелы и возвращать по одному слову за раз. Пара вопросов по этому коду: когда код доходит до * word ++ = c; линия я получаю дамп ядра. Правильно ли я написал эту строку? и вернусь правильно. И нужно ли как-то выделять память для хранения слова?

//get_word

int get_word(char *word,int lim){
int i=0;
int c;   
int quotes=0;
int inword = 1;

while(
       inword &&
       (i < (lim-1)) &&
       ((c=getchar()) != EOF) 
      ){

  if(c==('\"')){//this is so i can get a "string"  
    if (quotes) {
      inword = 0;
    }
    quotes = ! quotes;
  }
  else if(quotes){ //if in a string keep storing til the end of the string
    *word++=c;//pointer word gets c and increments the pointer 
    i++; 
  }
  else if(!isspace(c)) {//if not in string store
    *word++=c;
    i++;
  } 
  else {
    // Only end if we have read some character ...
    if (i) 
      inword = 0;
  }
}
*word='\0';                            //null at the end to signify
return i;                               //value

}

1 Ответ

2 голосов
/ 24 октября 2010

Невозможно сказать, почему это ядро ​​сбрасывает, не увидев код, который вызывает get_word.Ошибка в строке, которую вы назвали, означает, что вы передаете ей что-то недопустимое в первом параметре.В этой строке нет ничего плохого, но если word не указывает на объем памяти, доступный для записи, чтобы вместить выходные символы, у вас возникли проблемы.

Ответ на ваш вопрос о выделении памяти дляДержите это да - однако это может быть локальным (например, массив символов в локальных переменных вызывающего, глобальный или на основе кучи (например, из char * wordHolder = malloc(wordLimit);). Тот факт, что вы спрашиваете это, подтверждает предположение, что ваше значение параметра 1 являетсяпроблема.

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