Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | | | |
[C++] Все-таки C :-) 16.12.02 12:07 Число просмотров: 1764
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> А как с strstream работать, посмотрел справку он как класс, > а можно как нибудь по проще к нему оброщаться ? Куда уж проще :) Запихал этот самый char * (лучше даже const char *) при конструировании, а дальше знай вытаскивай.
> просто чтоб в него перебросить данные из *char, а потом > прочитать как из потока (sscanf-ом к примеру, Нельзя sscanf использовать c strstream (без дополнительных кульбитов). Если очень хочется обойтись сями, могу еще предложить создавать memory mapped file с этой строкой, из которого потом читать ее fscanf'ом.
|
<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'ом.
|
|
|