Note, since *buff is a char, which is defined to have a sizeof of 1, you can technically leave it off and just do malloc(buffsize), but I wanted to show it to you if you ever use malloc for an array of something other than chars, like ints or structs or whatever. That's safer than doing sizeof(char) since if you ever change buff's type, the malloc will still allocate the right size.
char *buff; // global variable, to be used with malloc later
buff = malloc(buffsize * sizeof(*buff)); // in main, allocate buffsize bytes
VLAs don't make sense with global variables in your case, so disregard that option. Few compilers support the entire C99 set of features, but most major compilers support many of the features. VLAs are pretty simple to implement, so your school's compiler probably does, but don't worry about it. It would behoove you to find out what actual compiler and version you use at school however, and what features/capabilities it has. Ask your teacher.