#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;
}