http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
>Zero-length arrays are allowed in GNU C. They are very useful as the last element of a structure that is really a header for a variable-length object
Например, можно сделать структуру для хранения строк, первый элемент которой это количество элементов байт, второй это массив любой нужной длины
typedef struct
{
size_t size;
char string[0];
} mystr;
Получится что-то вроде паскалевых строк. Про хреновость нуль-терминированных (ASCIIZ) строк хорошо написано тут http://www.joelonsoftware.com/articles/fog0000000319.html