1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
1

Как динамически выделить память под массив неизвестной длинны? Длина определяется вводом с командной строки

17.08.2016, 23:38. Показов 1964. Ответов 6
Метки нет (Все метки)

Например, надо получить фамилию, имя и отчество пользователя через командную строку.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2016, 23:38
Ответы с готовыми решениями:

Выделить память под массив неизвестной длины
для программы нужен массив int Array т.е. длину строки я знаю, а сколько строк у меня будет...

Динамически выделить память под массив
Добрый день форусчани Как можно выделить память под массив объекта класса class Save_Colection {...

Динамически выделить память под массив
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный...

Динамически выделить память под массив функций
QByteArray (SerfingThread::*lp_GetRequest)(const QByteArray& ,const QByteArray&); как сделать тоже...

6
шКодер самоучка
2171 / 1878 / 912
Регистрация: 09.10.2013
Сообщений: 4,125
Записей в блоге: 7
17.08.2016, 23:46 2
Marty McFly, в этом случае ничего выделять не надо - данные будут занесены в массив argv
C
1
2
3
4
5
6
7
8
#include <stdio.h>
int main(int argc, char** argv) {
    int i = 1;
    for(; i < argc; ++i) {
        puts(argv[i]);
    }
    return 0;
}
1
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
18.08.2016, 05:25 3
Цитата Сообщение от Marty McFly Посмотреть сообщение
Например, надо получить фамилию, имя и отчество пользователя через командную строку.
Если в качестве аргументов, то уже написали выше как получить. Если вы просите пользователя ввести ФИО и считываете его через scanf или др., то все равно нужен буфер статический(в вашем примере нет смысла выделять динамически т.к. вы не знаете сколько пользователь символов введёт, а данные уже нужно куда-то складывать).
Можно конечно сделать как-то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h> 
 
int main ()
{
    char *buffer;
    int n = 0;
 
    printf("vvedite chislo simvolov:\n");
    scanf("%d", &n);
    buffer = (char *)malloc(sizeof(char)*n+1);
    printf("vvedite stroku:\n");
    scanf("%s", buffer);
    printf("vi vveli:\n");
    printf("%s\n", buffer);
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
18.08.2016, 11:40  [ТС] 4
То есть, невозможно создать такой массив, длинна которого оптимизируется под строку из scanf? Всегда нужно выделять наобум?
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,060
Записей в блоге: 1
18.08.2016, 11:51 5
Лучший ответ Сообщение было отмечено Marty McFly как решение

Решение

Создайте временный буфер заведомо большего размера, например 1 килобайт (или 1 мегабайт ) для ввода имени/фамилии (а заодно и других вводимых данных). После ввода переместите данные в соотвествующий буфер "по размеру", а в конце временный удалите (или используйте для других целей). Правда, неясно - зачем нужно заморачиваться по поводу экономии буфера (на персоналках это давно неактуально).
2
1 / 1 / 0
Регистрация: 07.06.2015
Сообщений: 77
18.08.2016, 11:57  [ТС] 6
А если данные получаю через scanf и не знаю какой длинны будет введена строка, то нужно наобум выделять количество памяти или можно как-то выделить ее ровно столько, сколько было введено символов через scanf?

Добавлено через 1 минуту
о, спасибо
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
18.08.2016, 18:25 7
Marty McFly, нужно использовать strlen() и malloc(),проштудируйте раздел "Динамическое выделение памяти" и вопрос отпадет сам собой
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2016, 18:25
Помогаю со студенческими работами здесь

Выделить память под двумерный массив динамически
Маюсь уже неделю, не могу выделить динамическую память под двумерный массив(чистый Си), чтобы на...

Можно ли динамически выделить память под массив указателей, на объекты класса?
Прошу прощения если не правильно назвал вопрос. Не знаю как правильно сформулировать. Можно ли...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*В одномерном массиве, состоящем из n вещественных элементов, вычислить: - количество элементов...

Выделить под массив динамически память. Обращаться к элементам массива необходимо используя указатель
/*Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент Если да, то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru