Как создать динамический массив типа char, не запрашивая заранее его длину? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Например, пользователь должен ввести арифметическое выражение. Он не знает, сколько это будет символов. Как в таком случае задать динамический массив?

Решение задачи: «Как создать динамический массив типа char, не запрашивая заранее его длину?»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define size 256
 
char *GetLongLongLine(FILE *f)
{   int k = 0;
    char *buf = (char*) malloc(size);
    char *res = (char*) malloc(size);
 
    while(fgets (buf , size , f) != NULL)
    {   if(k > 0)
        {   k++;
            res = (char*) realloc(res, k*size);
            strcat(res, buf);
        }
        else
        {   k++;
            strcpy(res,buf);
        }
            
        if(strlen(buf) < size-1)
            break;
    }
    res[strlen(res)-1] = '\0';
    
    free(buf);
    return res;
}
 
int main()
{   char *myLongLine = GetLongLongLine(stdin);
    printf("\n%s", myLongLine);
 
    free(myLongLine);
    getchar();
    return 0;
}

Объяснение кода листинга программы

  1. В функции GetLongLongLine создается динамический массив типа char с помощью функции malloc. Изначально выделяется память под строку максимальной длиной 256 символов.
  2. В цикле while происходит чтение строк из файла с помощью функции fgets. Если строка успешно прочитана, то она добавляется к результату.
  3. Если строка не пустая и длина результата превышает размер выделенной памяти, то память увеличивается с помощью функции realloc и результат дополняется до конца строки.
  4. Если строка пустая, то результат дополняется нулевым символом.
  5. В конце функции результат освобождается от лишней памяти с помощью функции free и возвращается.
  6. В функции main вызывается функция GetLongLongLine с аргументом stdin, чтобы считать строку с клавиатуры.
  7. Результат функции GetLongLongLine выводится на экран с помощью функции printf.
  8. Память, выделенная под результат, освобождается с помощью функции free.
  9. Программа завершается с помощью функции getchar и return 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы