Ввести строку и записать в массив - 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), если он присутствует. Если память под строку выделяется некорректно, то выводится сообщение об ошибке и программа завершается. Возможные шаги для объяснения кода:
- Подключение необходимых библиотек
- Определение константы длины строки по умолчанию
- Функция для считывания строки из файла или стандартного ввода
- Выделение памяти под строку с запасом
- Индикатор размера текущей строки
- Считывание символов строки до символа новой строки или конца файла
- Реализация динамического увеличения памяти под строку при необходимости
- Возвращение считанной строки, выделение под неё памяти
- Основной цикл программы, в котором считанная строка выводится на экран
- Окончание программы при достижении определённого условия
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д