struct vec { char *data, int capacity, int size };

void expand(struct vec *v, int n)
{
  if (v->capacity < n)
    v->data = realloc(v->data, v->capacity = n);
}

みたいのがあって、expand()はv->dataが0の場合にも呼ばれ得る、
みたいなケースなら、わざわざif()で分けるよりは
realloc()一本のほうがすっきりする、かも知れない。