Dynamisch vom Benutzer eingegebene Zeichenfolge zuweisen

Ich versuche, eine Funktion zu schreiben, die die folgenden Aktionen ausführt:

Starte eine Eingabeschleife und drucke'> ' jede Iteration.Nehmen Sie alles, was der Benutzer eingibt (unbekannte Länge), und lesen Sie es in ein Zeichenarray, wobei Sie die Größe des Arrays gegebenenfalls dynamisch zuweisen. Die vom Benutzer eingegebene Zeile endet mit einem Zeilenumbruch.Füge ein Null-Byte hinzu,'\0', bis zum Ende des Zeichenarrays.Loop wird beendet, wenn der Benutzer eine leere Zeile eingibt:'\n'

Das habe ich gerade geschrieben:

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

Now, ich bin mir nicht sicher, wie ich das Null-Byte an das Ende der Zeichenfolge anhängen soll. Ich habe mir so etwas gedacht:

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

Aber ich bin mir nicht sicher, ob das funktionieren würde. Ich kann nicht testen, ob es funktionieren würde, da dieser Fehler auftritt, wenn ich versuche, meinen Code zu kompilieren:

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

Was kann ich tun, damit mein Code funktioniert?

EDIT: Ändern vonscanf("%a[^\n]%*c",&input) == 1 zuscanf("%as[^\n]%*c",&input) == 1 gibt mir den gleichen Fehler.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage