Ваш код является выражением присваивания, а не инициализатором. Инициализация может произойти только тогда, когда объект определен.
Кроме того, массивы должны быть определены с размером. И есть лучшие способы инициализации объекта нулями, чем пытаться использовать назначенные диапазоны инициализатора.
Вот два варианта:
int main(int argc, char *argv[])
{
long size = strtol(argv[1], NULL, 10);
buffer_t A[size];
memset(&A, 0, sizeof A);
или
buffer_t *A;
size_t size;
int main(int argc, char *argv[])
{
size = strtol(argv[1], NULL, 10);
A = calloc(size, sizeof *A); // already zero-initialized
Последнее, вероятно, лучше в том смысле, что вы можете проверить наличие ошибок выделения, и оно поддерживает большие выделения.