Pueso eso va a depender del lenguaje de programación que estés usando, principalmente si el lenguaje utiliza memoria reservada de manera fija para almacenar contenido de bytes como c, pero en casos como Java, Python, etc no necesitarás calcular el tamaño asignado porque realmente no existe un tamaño como tal ya que cada variable se guarda en memoria de manera dinámica según el caso a excepción de los arrays primitivos.
En el caso de c++ debes reemplazar la entrada por std::string ya que este es de almacenamiento dinámico automático, en el caso de c debes contar la cantidad de bytes y modificar el tamaño asignado de la variable y reasignar el contenido copiandolo directamente desde la memoria, el problema es que esto da un gran problema y es que pierde integridad de datos de entrada ya que si tienes una variable de n espacios reservados, entonces no deberías permitir una entrada mayor a esa cantidad de bytes y copiar unicamente desde el primer byte hasta la posición de n con memcpy() y malloc(), intentar designar un espacio constante a una variable que modificará su tamaño con el tiempo es antinatural, en ese caso utiliza directamente una variable de espacio dinámico con un puntero en memoria.
Imagina que crear variables es algo así como crear columnas en una tabla de una base de datos, puedes asignar longitudes cortas o muy largas reservadas, pero esto puede impactar de manera negativa o positiva ya que si tienes pocos registros largos en columnas con longitud reservada muy alta tendrás mucho espacio inflado con bytes nulos y aumentarás el uso de memoria ram, y si tu columna es muy corta entonces puedes tener problemas de integridad de datos de entrada, por lo que asignar un valor certero para cada cosa es indispensable. Toma como ejemplo los RFC de estándares de protocolos, cada dato en general tiene su longitud máxima para no abusar de la memoria y poder reservar espacios estrictamente estáticos como por ejemplo la longitud máxima de una dirección url aceptada por el protocolo http, una cabecera, un nombre de dominio, un correo electrónico, una dirección ip, un mensaje, un id, etc.
Si el proyecto es tuyo, te recomiendo mantener las variables con longitud estática y ser estricto en sus controles para evitar su desbordamiento, eso aumentará drásticamente el performance en el uso de memoria y cpu o utilizar directamente std:: pero impactará directamente en el consumo de memoria y cpu y la velocidad de ejecución, lo mismo sucede con lenguajes interpretados y semicompilados que necesiten de una máquina virtual como java, c#, cpython, etc.
Digamos que para un determinado n el tiempo puede variar en el rango de dos funciones
En tu caso específico que neceistas que en x tiempo la longitud sea modificada deberás designar una variable numérica y actualizarla con pthread donde según ese valor numérico calculas cual tiene que ser la longitud deseada y modificas el tamaño de la entrada y de la variable que lo almacena, para lograr esto debes separar la funcionalidad del main() y pasarle como argumento a una función el valor máximo que soportará en memoria tus datos de entrada, con eso ya podrás hacerlo dinámico y cíclica. Sólo necesitarás unas 3 funciones nada más, el main, el hilo de proceso con el timer y la función que solicita el valor de entrada y listo. Si la aplicación no es persistente (solo se ejecuta una ves) entonces no necesitas el thread ni el timer, simplemente calculas el tiempo actual y en base a eso calculas la longitd dinámica de tu variable, luego copias de la memoria de argv y se lo pasas a la nueva variable teniendo cuidado del desbordamiento.
Mira esto:
https://en.wikipedia.org/wiki/Variable-length_arrayhttps://www.geeksforgeeks.org/variable-length-arrays-in-c-and-c/Saludos.