Ввести строку и записать в массив - C (СИ)

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

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

как введёную пользователем строку записать в массив. если размер строки известен это понятно как делать. но если размер троки не известен заранее то и размер массива нельзя определить. Вопрос: как в си сделать чтобы вводилась строка, определялся её размер и под этот размер объявлялся массив и в него записалась строка?

Решение задачи: «Ввести строку и записать в массив»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define DEFAULT_STRING_LENGTH (32)
char * get_string(FILE * inputStream) {
    char * buf, * tmp;
    unsigned currentSize, charactersCount;
    int chr;
    
    if ( ! ( buf = malloc(DEFAULT_STRING_LENGTH) ) )
        return NULL;
    currentSize = DEFAULT_STRING_LENGTH;
    charactersCount = 0;
    
    while ( ( chr = fgetc(inputStream) ) != EOF && chr != '\n' ) {
        if ( charactersCount >= currentSize - 1 ) {
            if ( ! ( tmp = realloc(buf, currentSize + DEFAULT_STRING_LENGTH) ) ) {
                free(buf);
                return NULL;
            }
            buf = tmp;
            currentSize += DEFAULT_STRING_LENGTH;
        }
        buf[charactersCount++] = (char)chr;
    }
    buf[charactersCount++] = '\0';
    
    return realloc(buf, charactersCount);
}
 
int main(void) {
    char * s;
    
    while ( printf("String: ") ) {
        if ( ! ( s = get_string(stdin) ) ) {
            fprintf(stderr, "Memory error!\n");
            return 1;
        }
        if ( *s == '\0' ) {
            free(s);
            break;
        }
        printf("You has entered: %s\n", s);
        free(s);
    }
    
    return 0;
}

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

В данном коде происходит считывание строки из файла или стандартного ввода (stdin). Вводную строку сохраняют в массиве, выделяют под неё память динамически с запасом, увеличивая размер при необходимости. Код считывает символы строки, включая символ новой строки (\n), если он присутствует. Если память под строку выделяется некорректно, то выводится сообщение об ошибке и программа завершается. Возможные шаги для объяснения кода:

  1. Подключение необходимых библиотек
  2. Определение константы длины строки по умолчанию
  3. Функция для считывания строки из файла или стандартного ввода
  4. Выделение памяти под строку с запасом
  5. Индикатор размера текущей строки
  6. Считывание символов строки до символа новой строки или конца файла
  7. Реализация динамического увеличения памяти под строку при необходимости
  8. Возвращение считанной строки, выделение под неё памяти
  9. Основной цикл программы, в котором считанная строка выводится на экран
  10. Окончание программы при достижении определённого условия

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


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

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

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