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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 03:38   #1
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию Ввод строки неизвестной длины

Для того, чтобы с помощь scanf() ввести строку, необходимо выделить для этого память. А если неизвестно, какова длина строки, то невозможно выделить правильное количество памяти. Как решать такую проблему?

Пример.
Код:
char* str;
scanf("%s", str);
Код не работает, потому что необходимо выделить память, куда будут записываться символы. То есть
Код:
char* str;
str = new char [n];
scanf("%s", str);
где n - количество символов. Но! Если это самое количество неизвестно? P.S. Если тема уже обсуждалась то не тыкайте в поиск, я искал - не нашел. Заранее спасибо.
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 27.02.2011, 03:56   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Вам обязательно Сишный ввод? Или С++ тоже можно?
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 27.02.2011, 04:12   #3
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

Можно и С++.
Помогли тебе - помоги другому.
Alt вне форума Ответить с цитированием
Старый 27.02.2011, 04:29   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Alt Посмотреть сообщение
Для того, чтобы с помощь scanf() ввести строку, необходимо выделить для этого память. А если неизвестно, какова длина строки, то невозможно выделить правильное количество памяти. Как решать такую проблему?
Использовать контейнеры переменной длины и по символу из потока копировать:
Код:
#include <iostream>
#include <string>

using namespace std;

string str;
while (1)
{
   str+= cin.get();
   if ( str.find("\n") != -1) //пока не будет переход строки
	break;
}
An1ka вне форума Ответить с цитированием
Старый 27.02.2011, 07:10   #5
Alt
Лжец и смутьян
Форумчанин
 
Аватар для Alt
 
Регистрация: 03.04.2009
Сообщений: 194
По умолчанию

An1ka, большое спасибо! Работает идеально.
Только цикл можно лаконичнее записать:
Код:
do
str+= cin.get();
while ( str.find("\n") != -1);
Помогли тебе - помоги другому.

Последний раз редактировалось Alt; 27.02.2011 в 07:23.
Alt вне форума Ответить с цитированием
Старый 27.02.2011, 14:34   #6
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Коряво как-то. Ужасно коряво. Вот же.
Код:
#include <iostream>
#include <string>

int main () {
  std::string str;
  std::getline(std::cin,str);
  std::cout << "You entered following: " << str << std::endl;
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление длины строки Agafon Microsoft Office Word 12 17.11.2010 15:43
измерение длины строки Agafon Общие вопросы Delphi 6 11.11.2010 15:13
Поиск длины строки beda Microsoft Office Word 5 21.06.2010 14:27
Строки неизвестной длины в си abr_question Общие вопросы C/C++ 18 22.01.2010 00:26
как взять со строки неизвестной длины n первых символов? :) peq Microsoft Office Excel 2 07.01.2010 22:40