LINUX.ORG.RU

Функция fscanf(). Не читает строку по шаблону. Язык Си.


0

1

Хочу чтобы функция прочитала из файла 100 символов строки, начинающейся с символов: $aBcDiFg и занесла эти символы в массив.

 
fscanf(fp, "$aBcDiFg%100s", array);

Такой код не работает. Функция возвращает ноль и массив без изменения. Подскажите, пожалуйста.



Последнее исправление: podovalov5 (всего исправлений: 2)

fscanf() не работает, как grep: функция не осуществляет поиск. Она лишь читает из текущего места по шаблону.

Sorcerer ★★★★★
()

man fscanf. особенно про «директивы».

alegz ★★★★
()
Ответ на: комментарий от Sorcerer

Шаблон тут как-то криво звучит, человек запутается. Я бы сказал «формат»

wlan ★★
()
Ответ на: комментарий от Sorcerer

Она лишь читает из текущего места по шаблону.

Мне же и надо прочитать по шаблону. А какой посоветуйте воспользоваться функцией?

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

Делайте поиск сами. Если fscanf() вернула 0, значит данные по текущей файловой позиции не удовлетворяют формату. Пропускаете строку и пробуете снова.

Только учтите, что %s не будет читать все подряд символы, - см. man. И заодно описание возвращаемого значения для scanf() посмотрите, - проверки на 0 недостаточно.

wlan, согласен.

Sorcerer ★★★★★
()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от podovalov5

Если у вас гарантированно строки короче 100 символов, то ок.

four_str_sam
()

Терпеть ненавижу fscanf! В твоем случае самое лучшее решение — strstr + strdup.

Кстати, у тебя array — точно указатель на указатель на выделенную память?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Думаю, да. Объявлял array как статический массив символов - char array[100];.

podovalov5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.