информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





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

А как с strstream работать, посмотрел справку он как класс, а можно как нибудь по проще к нему оброщаться ?
просто чтоб в него перебросить данные из *char, а потом прочитать как из потока (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-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach