информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetПортрет посетителяГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft сообщила о 44 миллионах... 
 Множественные уязвимости в VNC 
 Шестой Perl превратится в Raku,... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
C или CPP? 15.12.02 13:20  Число просмотров: 1271
Автор: Safe Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > FILE * в C не является потоком в широком смысле. Это
> только
> > файловый поток. Чтоб перенаправить это в память нужно
> > делать фаловую систему, а это уже в internals вопросик
> :-)
>
> Как лучше не знаю, но смысл такой:
> при чтении sscanf-ом из памяти, то при каждом вызове
> начинает читать с самого начала, а мне надо чтоб
> продолжалось чтение с места где закончила преведущая
> команда sscanf, как при чтении из файла fscanf-ом.
> Подскажите как лучше это сделать ?

Не сложно:
char *str,*temp;
...
temp = str;
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
-----
sscanf должен возвращать количество прочтенных символов,
таким образом каждый раз в данном примере sscanf будет читать с того
места где закончил.
<programming>
[C++] Память в поток 06.12.02 14:23  
Автор: VavanG Статус: Незарегистрированный пользователь
<"чистая" ссылка>
можно ли как нибудь обратиться к облости памяти как к потоку ?
к приверу объявили
char *temp;
объявили, что то туда записали
а потом прочитать fscanf()-ом как из потока...
[C++] Память в поток 06.12.02 21:15  
Автор: beetle <beetle> Статус: Member
<"чистая" ссылка>
> можно ли как нибудь обратиться к облости памяти как к
> потоку ?
> к приверу объявили
> char *temp;
> объявили, что то туда записали
> а потом прочитать fscanf()-ом как из потока...
какой поток что-то файловый или thread ????
C или CPP? 06.12.02 15:33  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> можно ли как нибудь обратиться к облости памяти как к
> потоку ?
> к приверу объявили
> char *temp;
У ЦПП есть класс strstream - наследник iostream-а, так что все, кому нужен указатель на поток с ним будут работать как с обычным потоком
> объявили, что то туда записали
> а потом прочитать fscanf()-ом как из потока...
А на C даже не пытались как-нить унифицировать это дело - не та парадигма. Хочешь читать со стандартного ввода - printf/scanf, из файла - fprintf/fscanf, а из строки (читай памяти) sprintf, sscanf.
FILE * в C не является потоком в широком смысле. Это только файловый поток. Чтоб перенаправить это в память нужно делать фаловую систему, а это уже в internals вопросик :-)

Бест регардс
C или CPP? 09.12.02 07:19  
Автор: VavanG Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> FILE * в C не является потоком в широком смысле. Это только
> файловый поток. Чтоб перенаправить это в память нужно
> делать фаловую систему, а это уже в internals вопросик :-)

Как лучше не знаю, но смысл такой:
при чтении sscanf-ом из памяти, то при каждом вызове начинает читать с самого начала, а мне надо чтоб продолжалось чтение с места где закончила преведущая команда sscanf, как при чтении из файла fscanf-ом.
Подскажите как лучше это сделать ?
C или CPP? 15.12.02 13:20  
Автор: Safe Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > FILE * в C не является потоком в широком смысле. Это
> только
> > файловый поток. Чтоб перенаправить это в память нужно
> > делать фаловую систему, а это уже в internals вопросик
> :-)
>
> Как лучше не знаю, но смысл такой:
> при чтении sscanf-ом из памяти, то при каждом вызове
> начинает читать с самого начала, а мне надо чтоб
> продолжалось чтение с места где закончила преведущая
> команда sscanf, как при чтении из файла fscanf-ом.
> Подскажите как лучше это сделать ?

Не сложно:
char *str,*temp;
...
temp = str;
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
temp += sscanf(temp, ...);
-----
sscanf должен возвращать количество прочтенных символов,
таким образом каждый раз в данном примере sscanf будет читать с того
места где закончил.
[C++] Не катит 16.12.02 12:00  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> sscanf должен возвращать количество прочтенных символов,
> таким образом каждый раз в данном примере sscanf будет
> читать с того
> места где закончил.
Может быть, и должен, но man sscanf для не слишком древнего glibc выдает следующую справку:
RETURN VALUE
...return the number of input items assigned...
(надеюсь, я не очень жестоко обошелся с контекстом). Перевожу: семейство scanf возвращает (в отличие от printf) не число выведенных символов, а число присвоенных значений. В этом все и грабли.
Все-таки C :-) 09.12.02 12:31  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
> Как лучше не знаю, но смысл такой:
> при чтении sscanf-ом из памяти, то при каждом вызове
> начинает читать с самого начала, а мне надо чтоб
> продолжалось чтение с места где закончила преведущая
> команда sscanf, как при чтении из файла fscanf-ом.
> Подскажите как лучше это сделать ?

Да, уж. Для данной задачи лучше или C++-ный strstream - он сам себя приращивает или, если формат строки все равно известен - то пропускать нужные символы вручную. Если там намешано и строк и чисел, то еще лучше не использовать sscanf, а взять atoi, atof, atol (и т.д.) и strcpy, strcat, strchr и разбирать вход самостоятельно.
Все-таки C :-) 15.12.02 07:13  
Автор: VavanG Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Да, уж. Для данной задачи лучше или C++-ный strstream - он
> сам себя приращивает или, если формат строки все равно
> известен - то пропускать нужные символы вручную. Если там
> намешано и строк и чисел, то еще лучше не использовать
> sscanf, а взять atoi, atof, atol (и т.д.) и strcpy, strcat,
> strchr и разбирать вход самостоятельно.

А как с strstream работать, посмотрел справку он как класс, а можно как нибудь по проще к нему оброщаться ?
просто чтоб в него перебросить данные из *char, а потом прочитать как из потока (sscanf-ом к примеру, и чтоб он постоянна не начинал читать с начала строки) ?
Подскажите пожалуйста...
[C++] Все-таки C :-) 16.12.02 12:07  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> А как с strstream работать, посмотрел справку он как класс,
> а можно как нибудь по проще к нему оброщаться ?
Куда уж проще :) Запихал этот самый char * (лучше даже const char *) при конструировании, а дальше знай вытаскивай.

> просто чтоб в него перебросить данные из *char, а потом
> прочитать как из потока (sscanf-ом к примеру,
Нельзя sscanf использовать c strstream (без дополнительных кульбитов). Если очень хочется обойтись сями, могу еще предложить создавать memory mapped file с этой строкой, из которого потом читать ее fscanf'ом.
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach