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

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

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

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

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

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

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

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

Динамическое выделение памяти
Прошу помощи опытных программистов, изначально размеренность динамического массива равна 2 и если...

2
stake-k26
662 / 458 / 350
Регистрация: 25.04.2016
Сообщений: 1,317
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
1328 / 960 / 220
Регистрация: 09.09.2017
Сообщений: 3,968
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2018, 10:24

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

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

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


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

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

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