Puede que te encuentres con sorpresas pues C intenta acomodar los datos de las estructuras para que al procesador le sea más fácil acceder a los miembros.
Así no se dimensionan matrices. Una matriz estática no se debe dimensionar con variables. Si puedes es por extensión del compilador. Una matriz no debe tener dimensión 0. Si puedes es por extensión del compilador. Una vez que se ha dimensionado una matriz estática no puede cambiar de tamaño. Eso que has hecho de pedir el tamaño después es totalmente erróneo. C no comprueba el límite de los datos, es tarea del programador hacerlo. Has estado escribiendo fuera de la matriz y eso te podría causar problemas en programas mayores.
Si necesitas trabajar de esa forma debes mirar lo de la memoria dinámica, la familia de funciones alloc y free para liberar la memoria adquirida cuando ya no se necesite.
Eso es porqué no ha usado las etiquetas GeSHi o code para incrustar el código, así cuando aparece algo cómo array[i], todo lo que vaya después de la i entre corcheas se convertirá en cursiva, ya que en bbcode significa texto en cursiva.
Sirve para que un objeto global no sea visto desde fuera del archivo, así si hicieras una librería esa sería la forma de ocultar esas función que no quieres que la gente use. Cómo un método private en POO.