2
Apr
C string explode
Add Comment
I was working on porting some code from C++ to C and I couldn’t really find a simple explode() function for C online. So, of course, I had to make it myself. I’m just putting it here for general reference. This implementation uses malloc(), so it’s going to be a little less performant than a static one, though easier to use. At least it can’t be any worse than my C++ implementation!
No guarantees, you’re granted the code under the MIT license.
typedef struct StringList
{
char* value;
struct StringList* next;
} StringList;
void StringListFree(StringList* node)
{
// Delete the nodes in order
while(node != NULL)
{
StringList* last = node;
node = node->next;
free(last->value);
free(last);
}
}
// Returns a linked list of malloc'ed NULL-terminated strings. The delimiter is erased.
static StringList* explode(const char* text, char delimiter)
{
StringList* head;
StringList* new_node;
StringList** node;
const char* start;
const char* end;
unsigned int size;
if(text == NULL)
return NULL;
head = NULL;
node = &head;
// Doesn't technically support UTF-8, but it's probably fine, right?
size = 0;
start = end = text;
while(1)
{
if(*end == delimiter || *end == '\0')
{
*node = (StringList*)malloc(sizeof(StringList));
new_node = *node;
new_node->value = (char*)malloc(size + 1);
memcpy(new_node->value, start, size);
new_node->value[size] = '\0';
new_node->next = NULL;
if(*end == '\0')
break;
node = &((*node)->next);
start = end+1;
size = 0;
}
else
++size;
++end;
}
return head;
}