Я пытаюсь проанализировать текстовый файл (CSS) с помощью fscanf и извлечь все операторы, которые соответствуют этому шаблону:
@ import "some / file /where.css";
Для этого у меня настроен следующий цикл:
FILE *file = fopen(pathToSomeFile, "r");
char *buffer = (char *)malloc(sizeof(char) * 9000);
while(!feof(file))
{
// %*[^@] : Read and discard all characters up to a '@'
// %8999[^;] : Read up to 8999 characters starting at '@' to a ';'.
if(fscanf(file, "%*[^@] %8999[^;]", buffer) == 1)
{
// Do stuff with the matching characters here.
// This code is long and not relevant to the question.
}
}
Это прекрасно работает, так как ОЧЕНЬ ПЕРВЫЙ символ в файле не является символом @. (Буквально, один пробел перед первым символом «@» в файле CSS заставит код работать нормально.)
Но если самый первый символ в файле CSS - это '@', то в отладчике я вижу бесконечный цикл - выполнение входит в цикл while, попадает в оператор fscanf, но не вводит 'if '(fscanf терпит неудачу), а затем продолжается через цикл навсегда.
Я полагаю, что моим форматерам fscanf может потребоваться некоторая настройка, но я не уверен, как поступить. Любые предложения или объяснения, почему это происходит?
Спасибо.