Выделить память строго под вводимую строку - C (СИ)
Формулировка задачи:
Имею:
Ввел я строку меньше 100 байт. Понятно, что остальная выделенная память не используется.
Подскажите, пожалуйста, как вводить строку любой длины (в разумных пределах, конечно). И чтобы память выделялась разумно – строго под введённые данные.
Например, ввёл "abc", переменной "с" отводится 4 байта: 3 символа + \0
Например, ввёл "a", переменной "с" отводится 2 байта: 1 символ + \0
Может есть какая-то функция – тыкните ссылкой, пожалуйста.
#include <stdio.h> void main() { char c[100]; gets(c); puts(c); }
Решение задачи: «Выделить память строго под вводимую строку»
textual
Листинг программы
#include <glib.h> int main(void) { char * str; GError * err = NULL; GIOChannel * inp; inp = g_io_channel_unix_new(0); if ( ! inp ) g_error("Can't get channel to stdin\n"); while ( g_print("String: "), g_io_channel_read_line(inp, &str, NULL, NULL, &err) == G_IO_STATUS_NORMAL && *str != '\n' ) { g_print("You have entered: %s", str); g_free(str); } if ( err ) g_error("%s\n", err->message); return 0; }
Объяснение кода листинга программы
- Подключение заголовочного файла
для работы с функциями и структурами библиотеки GLib. - Объявление функции main() — точки входа в программу.
- Объявление переменной типа char* str; для хранения строки вводимой пользователем.
- Объявление переменной типа GError* err; для обработки ошибок.
- Открытие файла stdin с помощью функции g_io_channel_unix_new(0).
- Проверка на успешное открытие файла, иначе вывод ошибки с помощью функции g_error().
- В цикле while считываем строку посимвольно с помощью функции g_io_channel_read_line(inp, &str, NULL, NULL, &err) до тех пор пока не будет введен символ новой строки.
- Выводим введенную строку с помощью функции g_print().
- Освобождаем память с помощью функции g_free().
- Если возникла ошибка, то выводим сообщение об ошибке с помощью функции g_error().
- Завершение программы с помощью оператора return 0;.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д