Здравствуйте, Аноним, Вы писали:
А>сабж. А>посчитать \n и \0 могу, длину всего буфера узнать могу, а длину до \n не могу, как? А>можно использовать только циклы и lseek, без getchar(и подобных). А>т.е. нужно узнать прошлое i до \n что-бы от нынешнего i до \n отнять то самое прошлое i до \n, но как это сделать срастить никак не могу.
Полная хрень. Вообще непонятно, что аффтар хотел сказать\спросить.
Здравствуйте, <Аноним>, Вы писали:
А>посчитать \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 исп. только сис вызовы?
Здравствуйте, _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; // текущее ichar *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; // Предыдущее iint next_i = next - str; // Следующее i
// Если просто длина строки, ограниченной \n, в которую входит i-й символ, нужна, то:
cout << next - prior << endl;
Писал здесь, так что возможно неправ. Да и вопрос непонятный какой-то, может вообще не в тему решение. Ну и это только для 1-байтовых кодировок