I am trying to write a basic CSV parser in C that generates a dynamic array of char* when given a char* and a separator character, such as a comma:
char **filldoc_parse_csv(char *toparse, char sepchar)
{
    char **strings = NULL;
    char *buffer = NULL;
    int j = 0;
    int k = 1;
    for(int i=0; i < strlen(toparse); i++)
    {
        if(toparse[i] != sepchar)
        {
            buffer = realloc(buffer, sizeof(char)*k);
            strcat(buffer, (const char*)toparse[i]);
            k++;
        }
        else
        {
            strings = realloc(strings, sizeof(buffer)+1);
            strings[j] = buffer;
            free(buffer);
            j++;
        }
    }
    return strings;
}
However, when I call the function as in the manner below:
char **strings = filldoc_parse_csv("hello,how,are,you", ',');
I end up with a segmentation fault:
Program received signal SIGSEGV, Segmentation fault.
__strcat_sse2 () at ../sysdeps/x86_64/multiarch/../strcat.S:166
166 ../sysdeps/x86_64/multiarch/../strcat.S: No such file or directory.
(gdb) backtrace
#0  __strcat_sse2 () at ../sysdeps/x86_64/multiarch/../strcat.S:166
#1  0x000000000040072c in filldoc_parse_csv (toparse=0x400824 "hello,how,are,you", sepchar=44 ',') at filldocparse.c:20
#2  0x0000000000400674 in main () at parsetest.c:6
The problem is centered around allocating enough space for the buffer string. If I have to, I will make buffer a static array, however, I would like to use dynamic memory allocation for this purpose. How can I do it correctly?
 
     
    