In C, you can copy memory from one area to another using memcpy(). The prototype for memcpy() is:
void *memcpy(void *dst, const void *src, size_t n);
and the description is that it copies n bytes from src to dst, and returns dst.
So, to copy 300 bytes from b to a where both a and b point to something useful, b has at least 300 bytes of data, and a points to at least 300 bytes of space you can write to, you would do:
memcpy(a, b, 300);
Now your task should be something along the lines of:
typedef struct chunk
{
char data[300];
} CHUNK;
char *buffer;
CHUNK c[100];
size_t i;
/* make buffer point to useful data, and then: */
for (i=0; i < 300; ++i)
memcpy(c[i].data, buffer+i*300, 300);