информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





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

Бест регардс
<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-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach