What is unknown, the number of strings, size of strings, or both?
You can dynamically allocate an array of char *'s to hold each string char **strings = (char**) malloc(NUM_OF_STRINGS * (sizeof(char*))); calling realloc() as necessary to allocate more strings. For each string you add to the array of strings, also dynamically allocate with malloc strings[index] = (char*) malloc(SIZE_OF_STRING); You'll need to keep track of the number of these strings you allocate and resize the strings array accordingly. Each string will need to be free'd by iterating over the array of strings:
for(unsigned int i = 0; i < stringCount; ++i)
{
free(strings[i]);
}