Alocar dinamicamente a sequência inserida pelo usuário

Estou tentando escrever uma função que faz o seguinte:

Inicie um loop de entrada, imprimindo'> ' cada iteração.Pegue o que o usuário digitar (comprimento desconhecido) e leia-o em uma matriz de caracteres, alocando dinamicamente o tamanho da matriz, se necessário. A linha inserida pelo usuário terminará com um caractere de nova linha.Adicione um byte nulo,'\0', até o final da matriz de caracteres.O loop termina quando o usuário insere uma linha em branco:'\n'

Isto é o que eu escrevi atualmente:

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;
}

Agora, não tenho muita certeza de como adicionar o byte nulo ao final da string. Eu estava pensando algo assim:

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

Mas não tenho muita certeza se isso funcionaria. Não posso testar se funcionaria porque estou encontrando esse erro ao tentar compilar meu código:

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

Então, o que posso fazer para que meu código funcione?

EDIT: mudandoscanf("%a[^\n]%*c",&input) == 1 parascanf("%as[^\n]%*c",&input) == 1 me dá o mesmo erro.