если интерес академический, то как предложили коллеги: malloc/calloc
если надо чтобы работало, берите glib (не путать с glibc)
если надо чтобы работало, и glib не устраивает (тяжело себе представить такую ситуацию, но допустим), выделяйте больше, например [512], но считывайте в них только первые [500] (тож например), scanf так умеет. проверяйте сколько считалось: если ровно 500 - пользователь точно ввёл много и скорее всего всё не влезло, ругайтесь на него (скажите, что 256 было максимум) и считывайте опять. если же <500, то всё ок, можно работать. надеюсь понятно объяснил: главное - не считать данных больше, чем выделено места (избегнуть переполнения буфера)