using namespace std;
//..........
vector< string *> array;
string * str = new string;
getline(cin, *str);
array.push_back(str);
строки переменной длины
нужно с консоли получить строку произвольной длины. как узнать длину строки и динамически выделить под нее память. потом разместить указатель на нее, и поместить указатель в массив указателей. причем массив должен быть переменной длины.
Код:
вообще-то в си
Ответ на твой вопрос: почитай о функциях динамического выделения памяти в С(google тебе в помощь), также в Студентах есть в FAQ'е пример работы с функцией malloc.
Код:
char buffer[MAX]
но предположим длина строки получаемой с консоли > MAX.
тогда как получить длину строки(в сущности в потоке stdin), а потом, например, с помощью realloc выделить память. и поместить строку
считываем строку в buffer
функцией strlen определяем реальную длину строки
выделяем память под реальную длину
копируем в выделенную память из buffer'а
добавляем указатель в массив
Если такой вариант не устраивает, можно читать посимвольно getchar'ом
Обычно длинну строки ограничивают при вводе и отводят для ввода массив максимальной длины, скажем 127 байт. Если пишешь под DOS, хорошо подходит функция cgets. В ANSI C -функция gets, но она не позволяет ограничить длину вводимой строки при вводе (вроде ограничена 127 байтами, но может зависеть от компилятора)
Да, это стандартный вариант. Задать скажем, #define MAX 1000 и использовать. Но вопрос другой, как обойти это
Нужна именно возможность ввода бесконечных строк?
Roy, чем тебя пример в FAQ'е раздела Студентам не устраивает? или поиск в интернет? или наша справочная система по функциям на форуме?
Цитата: 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);
}
#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 :) это все же пример
Всем спасибо. вопрос снят. Помогло -
Цитата: flat
Можно задавать MAX большим, заведомо больше, чем длина строки. Далее:
считываем строку в buffer
функцией strlen определяем реальную длину строки
...getchar'ом
считываем строку в buffer
функцией strlen определяем реальную длину строки
...getchar'ом
А вот прикол strlen возврашает тот самый MAX, а не истенное занчение.
Код:
#include <stdio.h>
#include <string.h>
void main()
{
char buffer[100];
scanf("%s", buffer);
printf("%d", strlen(buffer));
}
#include <string.h>
void main()
{
char buffer[100];
scanf("%s", buffer);
printf("%d", strlen(buffer));
}
Цитата:
>hello
5
Компилятор bcc32