Re: узнать размер до \n\0 исп. только сис вызовы?
От: _Ursus_  
Дата: 16.08.09 08:31
Оценка: +7
Здравствуйте, Аноним, Вы писали:

А>сабж.

А>посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как?
А>можно использовать только циклы и lseek, без getchar(и подобных).
А>т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.

Полная хрень. Вообще непонятно, что аффтар хотел сказать\спросить.
Re: узнать размер до \n\0 исп. только сис вызовы?
От: Кодт Россия  
Дата: 17.08.09 10:32
Оценка: 1 (1)
Здравствуйте, <Аноним>, Вы писали:

А>посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как?

А>можно использовать только циклы и lseek, без getchar(и подобных).
А>т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.

Тебе нужно выделить память под строку, читаемую из файла?
И тебя жаба давит посимвольно читать и поштучно перевыделять?
Наплюй. Здесь нет смысла экономить на спичках. Всё равно операции с файлами буферизуются, а грамотный контейнер выделяет память с запасом, так что и лишних обращений к менеджеру кучи не будет.
А чтоб писанины меньше было, используй STL:
std::string line;
std::getline(std::cout, line);


Что же касается последней фразы — тут какой-то мрак. Хоть бы привёл пример "на пальцах".
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
узнать размер до \n\0 исп. только сис вызовы?
От: Аноним  
Дата: 15.08.09 14:43
Оценка: :)
сабж.
посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как?
можно использовать только циклы и lseek, без getchar(и подобных).
т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.
Re[2]: узнать размер до \n\0 исп. только сис вызовы?
От: Андрюха  
Дата: 16.08.09 11:19
Оценка:
Здравствуйте, _Ursus_, Вы писали:

_U_>Здравствуйте, Аноним, Вы писали:


А>>сабж.

А>>посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как?
А>>можно использовать только циклы и lseek, без getchar(и подобных).
А>>т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.

_U_>Полная хрень. Вообще непонятно, что аффтар хотел сказать\спросить.


Наверное, автор ассемблерщик...
Re: узнать размер до \n\0 исп. только сис вызовы?
От: Аноним  
Дата: 17.08.09 08:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>сабж.

А>посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как?
А>можно использовать только циклы и lseek, без getchar(и подобных).
А>т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.

Такое чтоль надо?
char *str = "трям\nИсходная строка\n"
int i = 5; // текущее i
char *prior, *next;
for (prior = str+i; prior > str && *prior != '\n'; --prior);
for (next = str+i; *next != '\0' && *next != '\n'; ++next);
int prior_i = prior - str; // Предыдущее i
int next_i = next - str; // Следующее i
// Если просто длина строки, ограниченной \n, в которую входит i-й символ, нужна, то:
cout << next - prior << endl;

Писал здесь, так что возможно неправ. Да и вопрос непонятный какой-то, может вообще не в тему решение. Ну и это только для 1-байтовых кодировок
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.