О распределении памяти в C
Память для объявленных переменных выделяется в стеке во время компиляции, и нельзя изменить во время выполнения. Для динамического выделения памяти во время выполнения вы используете. malloc()
функция с указателем переменной, которая размещается в куче. Любая память в куче может иметь только переменную-указатель, которая указывает на память, и никакие регулярно объявленные переменные не могут ссылаться на эту память. Синтаксис:
type* ptr = (type*) malloc(sizeof(type)) * number_of_locations);
Перераспределение динамически выделяемой памяти malloc()
без потери старых данных
Вы можете использовать функцию realloc()
.
ptr = (type*) realloc(ptr, sizeof(type)) * new_number_of_locations);
Во-вторых, char buf[0]
не должен компилироваться, и даже если это не имеет никакого эффекта, и запись в него может привести к ошибке сегментации.