2011-01-18 2 views
1

У меня есть программа, которая считывает данные с stdin. Эти данные представляют собой последовательность байтов. Если есть байт, описывающий новую строку в нем (в шестнадцатеричном формате: 0x0A), scanf перестает читать.Force scanf, чтобы потреблять новую строку

Могу ли я замаскировать этот байт, чтобы scanf продолжал читать всю последовательность?

Важно, чтобы память, написанная scanf, содержит символ новой строки.

+0

, где должен остановиться ваш сканер? – Rozuur

ответ

3

Не видя своего кода, я не могу дать точную рекомендацию. Но если ваша цель берет ввод «как есть», я рекомендую read() в качестве альтернативы scanf(). См. Это question для кого-то, у кого была совершенно противоположная проблема.

+0

Код отсутствует. У меня только скомпилированный двоичный файл, и мне нужно дать ему ввод. –

0
scanf("%[^`]s", str); 

Вы можете использовать некоторые вещи, подобные этому. `\ n теперь будет завершающей последовательностью символов.
Вы можете заменить `, используя любой другой символ или даже группу из них, и вход заканчивается этим символом, за которым следует \ n.

+0

Это почти то, что я ищу: изменить завершающую последовательность. Проблема в том, что: у меня есть только скомпилированный двоичный файл и я могу только изменить вход ... –

+0

В этом случае вы можете предварительно обработать вход, используя регулярное выражение s/\ n // g, которое в основном заменяет \ n на \ 0 ... используемое выражение может зависеть от языка (например, perl)/tool (например, sed), который вы используете, но обычно это так, как это делается – toofast1227

+0

PS - я знаю, что это происходит слишком поздно: P – toofast1227

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