Как отвести неопределенный размер в памяти - C (СИ)
Формулировка задачи:
Я объвляю переменную, указатель на пустую строку:
В теле программы определяю ее например
Вот так оно работает.
Могу ли я не задавая явно размер строки после компиляции, например
при помощи scanf присвоить не пустую строку этой переменной?
Я так понимаю в стеке с локальными переменными не получится,
а если например вынести за пределы главной функции,
что то на подобии секции .bss в асме в сегменте позволяющем
динамически выделять память?
char *str = {""};str = "table";
Решение задачи: «Как отвести неопределенный размер в памяти»
textual
Листинг программы
char* p;
scanf("%254[^\n]", p = malloc(255));
Объяснение кода листинга программы
В данном коде происходит следующее:
- Объявляется указатель
pна типchar. - Используется функция
scanfдля чтения строки, ограниченной 254 символами (поскольку%254указывает на максимальное количество символов, которые могут быть считаны). - В качестве второго аргумента функции
scanfиспользуется указательp, который указывает на выделенную память с помощью функцииmalloc(255 символов, поскольку в C строки представлены какchar arraysи требуют дополнительного символа нулевого терминатора). Таким образом, в результате выполнения данного кода в переменнуюpбудет сохранена строка, которая была введена пользователем.