строка, реализованная в виде списка (простейшая реализация)
Это просто реализуется, но имеет дикий оверхид, требующий для хранения каждого символа 17 байт, поэтому на практике приходится использовать комбинированный способ, сочетающий в себе строковые буфера со списками:
#define STR_SIZE 256
struct slist
{
unsigned int len;
unsigned char buf[STR_SIZE];
struct slist *prev;
struct slist *next;
struct slist *first;
struct slist *last;
};