Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Filo8of
1 / 1 / 0
Регистрация: 06.02.2016
Сообщений: 33
1

Динамическое выделение памяти

11.10.2018, 18:44. Просмотров 872. Ответов 2

Необходимо выделить память с помощью функции melloc под 5 символов char. При вводе пользователем строки, в случае если выделенное место заканчивается необходимо выделить еще место под 5 символов функцией realloc. Так до введения пользователем '\n'.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2018, 18:44
Ответы с готовыми решениями:

Динамическое выделение памяти
int *a = (int*)malloc(n * sizeof(int)); int *a // это тип указателя (int* ) // зачем вот это...

Динамическое выделение памяти в С
Ввести num - количество массивов. Ввести размерность очередного массива и его элементы целого типа,...

Динамическое выделение памяти
Всем привет! Решил вот разобраться с выделением памяти.В общем выделяем память для двух матриц...

Динамическое выделение памяти
Нужно организовать динамическое выделение в этой программе: #include <stdio.h> #include...

2
stake-k26
966 / 576 / 413
Регистрация: 25.04.2016
Сообщений: 1,631
11.10.2018, 21:49 2
Лучший ответ Сообщение было отмечено Filo8of как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
    char* buffer = NULL;            // буфер для хранения символов
    char c;                         // сюда записываем символы c клавиатуры
    unsigned int size = 0;          // размер буфера
    unsigned int n = 0;             // сколько символов в буфере
 
    /* получаем строку с клавиатуры */
    while ((c = getchar()) != '\n')
    {
        if (n + 1 > size)
        {
            size = (!size)? 5 : size+5; // определяем размер буфера
            // меняем размер буфера в памяти
            char * tmp = (char *) realloc(buffer, size * sizeof(char));
            if (!tmp)
            {
                free(buffer);
                return 0;
            }
            buffer = tmp;
        }
        buffer[n++] = c;    // заносим очередной имвол в буфер
    }
    if (n == 0 && c == '\n') return 0;  // если пустая строка, выходим
    buffer[n] = '\0';                   // добавляем конец строки
 
    /* выводим получившуюся строку на экран: */
    printf("Your string is: %s\n", buffer);
 
    /* конец программы: */
    free(buffer);   // освобождаем память
    return 0;       // выходим
}
1
COKPOWEHEU
2549 / 1472 / 327
Регистрация: 09.09.2017
Сообщений: 5,779
12.10.2018, 10:24 3
Не обязательно считывать по 1 символу:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main(){
  char *str = NULL;
  char *tmp = NULL;
  int ch;
  size_t size = 0;
 
  while(1){
    size+=5;
    tmp = (char*)realloc(str, size*sizeof(char));
    if(tmp == NULL){
      fprintf(stderr, "Can not allocate\n");
      if(str)free(str);
      return -1;
    }
    str = tmp;
    scanf("%4s", &str[size-5]);
    ch = fgetc(stdin);
    printf("%c\n", ch);
    if(isspace(ch) || ch==EOF)break;
    str[size-1] = ch;
  }
  printf("[%s]\n", str);
  free(str);
}
Но можно сделать и совсем просто:
C
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
 
int main(){
  char *str = NULL;
  scanf("%ms", &str);
  printf("[%s]\n", str);
  free(str);
}
0
12.10.2018, 10:24
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2018, 10:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Динамическое выделение памяти
задали задание по Си, сделать через динамическое выделение памяти. эту тему пропустил. читал...

Динамическое выделение памяти
Пользователь вводит число. Программа динамически выделяет массив типа char размера n, c помощью...

Динамическое выделение памяти в Си
Пожалуйста, расскажите или покажите на примере, как выделить динамическую память для ФУНКЦИИ. т.е....

Динамическое выделение памяти
Всем привет! Недавно начал изучать Си, и возник такой вопрос (кажется, дурацкий, но все же): почему...

Динамическое выделение памяти
Приветствую. Имеется код: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; typedef struct{ int...

Динамическое выделение памяти
Здравствуйте! Хочу часть кода,где динамически выделяется память под массив: double *darr; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.