Потому, что массив "block" живет на стеке и компилятору надо знать его размер еще на этапе компиляции, чтобы правильно посчитать смещения. Если на этапе компиляции Вы не знаете сколько вам может потребоваться памяти, используйте malloc() для ее выделения в куче.