Asignar dinámicamente una cadena ingresada por el usuario

Estoy tratando de escribir una función que haga lo siguiente:

Comience un ciclo de entrada, imprimiendo'> ' cada iteraciónTome lo que ingrese el usuario (longitud desconocida) y léalo en una matriz de caracteres, asignando dinámicamente el tamaño de la matriz si es necesario. La línea ingresada por el usuario finalizará en un carácter de nueva línea.Agregar un byte nulo,'\0', al final de la matriz de caracteres.El bucle termina cuando el usuario ingresa una línea en blanco:'\n'

Esto es lo que he escrito actualmente:

void input_loop(){
    char *str = NULL;

    printf("> ");

    while(printf("> ") && scanf("%a[^\n]%*c",&input) == 1){

        /*Add null byte to the end of str*/

        /*Do stuff to input, including traversing until the null byte is reached*/

        free(str);
        str = NULL;
    }
    free(str);
    str = NULL;
}

Ahora, no estoy muy seguro de cómo agregar el byte nulo al final de la cadena. Estaba pensando en algo como esto:

last_index = strlen(str);
str[last_index] = '\0';

Pero no estoy muy seguro de si eso funcionaría. No puedo probar si funcionaría porque me encuentro con este error cuando intento compilar mi código:

warning: ISO C does not support the 'a' scanf flag [-Wformat=]

Entonces, ¿qué puedo hacer para que mi código funcione?

EDITAR: cambioscanf("%a[^\n]%*c",&input) == 1 ascanf("%as[^\n]%*c",&input) == 1 me da el mismo error