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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 22:42   #1
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию Задачка на строки в С

Здравствуйте, программеры. Скажите, каким образом можно динамически выделять память для введенной пользователем строки? Вот моя наработка:
Код:
int main(void)
{
	char *arr;
	int size,i,count,g;
	char temp;
	size=i=count=0;
	printf("Helloy! How many symbols are you going to enter?:\t");
	scanf("%d",&size);
	arr = (char*)malloc((size+1)*sizeof(char));
	if(arr==NULL)
	{
		perror("\Error allocation memory");
		exit(-1);
	}
	for(i=0;i<size+1;i++)
	{
		arr[i]=fgetc(stdin);
	}	
	arr[size]='\0';
	puts(arr);
Как нетрудно догадаться, есть два недостатка: а) просит пользователя ввести кол-во символов б) выглядит крикозябристо)
Помогите, пожалуйста, модернизировать код, дабы не утруждать пользователя вводить кол-во символов!
Александр Елис вне форума Ответить с цитированием
Старый 12.11.2009, 23:03   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну, можно использовать реаллок, не самое быстрое решение, но работать будет ) Так же можно просто заведомо выделять больше памяти и брать строку функцией gets.
Код:
// Для первого можно написать примерно такую ф-цию:
char* getstring()
{
	char* str = (char*)(malloc(50));
	char  c = 0;
	unsigned int i = 0;
	unsigned int size_of_array = 50;

	while(c != '\n' && c != '\r') {
		c = getchar();
		if( i >= size_of_array ) {
			size_of_array += 50;
			str = (char*)(realloc(str, size_of_array));
		}
		str[i] = c;
		i++;
	}
	str[i] = 0;

	return str;
}
только следует не забывать об освобождении памяти = )
По поводу gets:
Код:
char buffer[80];
gets(buffer);
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки Java задачка asselka Общие вопросы по Java, Java SE, Kotlin 17 05.11.2009 01:42
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10
Задачка на строки Aleks_90 Помощь студентам 2 01.06.2009 22:36
Интересная задачка на строки! ТР7 maxiswell Помощь студентам 2 26.12.2008 21:46