Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

строки переменной длины

17K
05 июня 2007 года
Roy
24 / / 04.06.2007
нужно с консоли получить строку произвольной длины. как узнать длину строки и динамически выделить под нее память. потом разместить указатель на нее, и поместить указатель в массив указателей. причем массив должен быть переменной длины.
4.3K
05 июня 2007 года
flat
142 / / 27.12.2005
 
Код:
using namespace std;
//..........
vector< string *> array;
string * str = new string;
getline(cin, *str);
array.push_back(str);
17K
05 июня 2007 года
Roy
24 / / 04.06.2007
вообще-то в си
242
05 июня 2007 года
Оlga
2.2K / / 04.02.2006
Roy, [COLOR="Red"]если ты не заметил, в данном разделе можно задать вопросы по C, C++ или C#, поэтому надо указывать язык программирования.[/COLOR]

Ответ на твой вопрос: почитай о функциях динамического выделения памяти в С(google тебе в помощь), также в Студентах есть в FAQ'е пример работы с функцией malloc.
17K
05 июня 2007 года
Roy
24 / / 04.06.2007
при объявлении строки(скажем buffer) типа char мы обязаны указать макс. длину строки
 
Код:
char buffer[MAX]

но предположим длина строки получаемой с консоли > MAX.
тогда как получить длину строки(в сущности в потоке stdin), а потом, например, с помощью realloc выделить память. и поместить строку
4.3K
05 июня 2007 года
flat
142 / / 27.12.2005
Можно задавать MAX большим, заведомо больше, чем длина строки. Далее:
считываем строку в buffer
функцией strlen определяем реальную длину строки
выделяем память под реальную длину
копируем в выделенную память из buffer'а
добавляем указатель в массив

Если такой вариант не устраивает, можно читать посимвольно getchar'ом
1.6K
05 июня 2007 года
Vov4ick
476 / / 01.02.2007
Обычно длинну строки ограничивают при вводе и отводят для ввода массив максимальной длины, скажем 127 байт. Если пишешь под DOS, хорошо подходит функция cgets. В ANSI C -функция gets, но она не позволяет ограничить длину вводимой строки при вводе (вроде ограничена 127 байтами, но может зависеть от компилятора)
17K
05 июня 2007 года
Roy
24 / / 04.06.2007
Да, это стандартный вариант. Задать скажем, #define MAX 1000 и использовать. Но вопрос другой, как обойти это
1.6K
05 июня 2007 года
Vov4ick
476 / / 01.02.2007
Нужна именно возможность ввода бесконечных строк?
242
05 июня 2007 года
Оlga
2.2K / / 04.02.2006
Roy, чем тебя пример в FAQ'е раздела Студентам не устраивает? или поиск в интернет? или наша справочная система по функциям на форуме?
http://www.codenet.ru/search/?q=realloc&spr=any
google
http://forum.codenet.ru/showthread.php?t=32019
4.3K
05 июня 2007 года
flat
142 / / 27.12.2005
Цитата: Roy
Но вопрос другой, как обойти это


Я же говорю, читай посимвольно

Код:
#include <stdio.h>
#include <stdlib.h>

void main()
{
    int ch, str_size = 1;
    char * str = (char *) calloc(1, str_size);
    printf("Enter: ");
    while ((ch = getchar()) != '\n')
    {
        str[ str_size - 1 ] = (char) ch;
        str = (char *) realloc(str, ++str_size);
        str[ str_size - 1 ] = '\0';
    }
    printf("%s\n", str);
}


Здесь я не стал заморачиваться с размером char'а, использовал магическое число 1 :) это все же пример
17K
05 июня 2007 года
Roy
24 / / 04.06.2007
Всем спасибо. вопрос снят. Помогло - http://forum.codenet.ru/showpost.php?p=157460&postcount=5
714
14 ноября 2008 года
clgs
226 / / 29.10.2008
Цитата: flat
Можно задавать MAX большим, заведомо больше, чем длина строки. Далее:
считываем строку в buffer
функцией strlen определяем реальную длину строки
...getchar'ом


А вот прикол strlen возврашает тот самый MAX, а не истенное занчение.

4.3K
14 ноября 2008 года
flat
142 / / 27.12.2005
 
Код:
#include <stdio.h>
#include <string.h>

void main()
{
    char buffer[100];
    scanf("%s", buffer);
    printf("%d", strlen(buffer));
}


Цитата:

>hello
5


Компилятор bcc32

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог