Для залипания цикла после вложения во время завершения цикла или после разрыва - PullRequest
0 голосов
/ 11 декабря 2018

Ниже приведен фрагмент кода для перебора списка имен файлов и проверки, совпадают ли они с именем файла, которое я ищу.Это кусочные файлы, поэтому я должен использовать sprintf для проверки определенного раздела файла.

for(i = 1; i < 4; i++){
    bzero(filebuf, 500);
    sprintf(filebuf, ".%s.%d",filebuf2, i);
    strcpy(fileslist2, fileslist);
    tok = strtok(fileslist2, "|");
    while(tok != NULL){
        tok = strtok(NULL, "|");
        if(strcmp(tok, filebuf) == 0){
            printf("Equal!\n");
            i = 5;
            break;
        }
    }
}

Идея в том, что если файл найден, мне нужно разорвать оба цикла.Но прямо сейчас, если он находит файл, код просто останавливается.Кроме того, если файла нет, цикл for должен повторяться и продолжать поиск следующего фрагмента.Этого тоже не происходит, после tok == NULL он просто зависает.Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 11 декабря 2018

Незначительная модификация, которая может помочь предотвратить strcmp на NULL

for(i = 1; i < 4; i++) {
  bzero(filebuf, 500);
  sprintf(filebuf, ".%s.%d",filebuf2, i);
  strcpy(fileslist2, fileslist);
  tok = strtok(fileslist2, "|");
  while(tok != NULL) {
      // tok = strtok(NULL, "|"); // moved down
      if(strcmp(tok, filebuf) == 0) {
          printf("Equal!\n");
          i = 5;
          break;
      }
      tok = strtok(NULL, "|"); // to here
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...