Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2008, 14:16   #1
Antolflash
Новичок
Джуниор
 
Регистрация: 27.12.2008
Сообщений: 2
Счастье Буфер ввода и выделение памяти

Есть ли способ выделить память под указатель на char, ровно столько, сколько нужно (т.е. определить сколько ввёл пользователь в консоли символов, выделить память и записать в неё то, что ввёл пользователь). Я знаком лишь с другим методом: выделяю много памяти, считываю в неё, а потом (чтобы память не засирать) применяю string=realloc(string, strlen(string)), т.е. перевыделяю память, новая память не будет содержать пустого хвоста. Но все эти перевыделения - это действия, программа копирует строку в новое место, и стирает старое. Этот метод не выгоден по ресурсам. (это конечно смешые объёмы, но всё-же, хочется правильно писать проги).
Код:
void main() 
{ 
    char *string; 
    int i=0; 
    while (getchar()!='\n') i++; 
    string=malloc((i+1)*sizeof(char)); 
    fseek(stdin,0,SEEK_SET); 
    fscanf(stdin, "%s", string); 
    printf("%s", string); 
     
    getch(); 
}
однако считать с потока ввода символы, введённые ранее не удаётся(

Если непонятно, что я имел виду, то пояню: хочется просто записать то, что я ввёл с клавиатуры, в динамическую память ( назову этот указатель char *string), но при этом я хочу сразу выделить память под указатель ровно столько, сколько нужно, не больше. Я вот слышал, что всё, что я ввёл с клавиатуры записывается в буфер. Нельзя ли после нажатия enter прочесть буфер, и зная количесво символов выделить память и записать символы в эту память? Scanf и getchar выталкивают буфер, а есть ли функция, которая просто открывает консоль и пишет в буфер?

Последний раз редактировалось Antolflash; 27.12.2008 в 14:25.
Antolflash вне форума Ответить с цитированием
Старый 27.12.2008, 22:20   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Чтобы выделить ровно столько, сколько ввели, нужно сначала динамически выделить больше, потом считать сколько ввели. Выделить ровно столько памяти сколько введено, скопировать строку. Затем просто удалить первую строку. В итоге у вас памяти ровно столько, сколько нужно под строку.

И не парьте себе мозги с getchar() и прочей дребеденью.
MaTBeu вне форума Ответить с цитированием
Старый 27.12.2008, 22:52   #3
Antolflash
Новичок
Джуниор
 
Регистрация: 27.12.2008
Сообщений: 2
По умолчанию

Цитата:
Чтобы выделить ровно столько, сколько ввели, нужно сначала динамически выделить больше, потом считать сколько ввели. Выделить ровно столько памяти сколько введено, скопировать строку. Затем просто удалить первую строку. В итоге у вас памяти ровно столько, сколько нужно под строку.
Этим методом я и пользовался ранее (когда про realloc рассказывал)

Понимаете, если вы видите символы на экране, значит они содержатся в соответствующем файле, буфер уже выделен в stdio.h, вот только как добраться до него? Как после нажатия enter узнать количесво символов в буфере ввода, а затем выделить это кол-во памяти?
Antolflash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение памяти FW-TOT Общие вопросы C/C++ 2 19.12.2008 00:42
До выделение памяти MAKTE Общие вопросы C/C++ 4 20.05.2008 21:34
Выделение памяти antoha.by Паскаль, Turbo Pascal, PascalABC.NET 2 29.04.2008 20:04
Выделение памяти в функции для переданных параметров LinuxUser Общие вопросы C/C++ 1 12.11.2007 19:21
выделение оперативной памяти Alar Общие вопросы Delphi 0 29.10.2006 21:56