Hola mig, aunque lo que planteas es totalemente válido hay que tener mucho cuidado con el uso de memoria dinamica en sistemas con poco recurso de RAM, a veces es mas conveniente tomar una decisión de compromiso como lo seria de definir un largo máximo.
Respecto a la respuesta de RICHI777, es cierto que podría hacerlo asi pero necesitaría si se pudiese crear el array del tamaño exacto.
En si no se puede, el compilador al momento de compilar debe tener como constante el tamaño del mismo, no puede ser variable, algunos compiladores implementan una función que no es ANSI C llamada
Alloca que es similar al malloc, pero el espacio obtenido no es sacado del heap ( malloc trabaja asi ) sino del stack, con lo cual al salir de scope de la función ese espacio es restituido.
Saludos !