#include <stdio.h>
#include <stdlib.h>
char **explode(char delimiter, char *pStr)
{
    int n = 0;
    char *pStrStart = pStr;
    char **array;
    int i, j, len;
    
    if (*pStr != '\0')
        n++;
    while (*pStr != '\0')
    {
        if (*pStr == delimiter)
            n++;
        *pStr++;
    }
    pStr = pStrStart;
    
    array = (char **)malloc((n + 1) * sizeof(char *));
    for (i = 0; i < n; i++)
    {
        len = 0;
        pStrStart = pStr;
        while (*pStr != delimiter && *pStr != '\0')
        {
            len++;
            pStr++;
        }
        pStr = pStrStart;
        array[i] = (char *)malloc((len + 1) * sizeof(char));
        for (j = 0; j < len; j++)
        {
            array[i][j] = *pStr;
            pStr++;
        }
        pStr++; // jump over the delimiter
        array[i][len] = '\0';
    }
    array[n] = NULL;
    return array;
}
void strarrfree(char **array)
{
    char **pArray = array;
    while (*array != NULL)
    {
        free(*array);
        array++;
    }
    free(pArray);
}
void strarrprint(char **array)
{
    while (*array != NULL)
    {
        puts(*array);
        array++;
    }
}
int main()
{
    char *str = "linux,apache,mysql,php,IIS,Microsoft Access,SQL Server";
    char **strarr = explode(',', str);
    puts("List:");
    strarrprint(strarr);
    printf("\nThe second string is: %s\n", strarr[1]);
    strarrfree(strarr);
    return 0;
}            
                      

