Das Festlegen der maximalen Stringlänge, die dynamisch in C gescannt werden soll (wie "% * s" in printf)

Ich kann die maximale Anzahl von Zeichen für @ angebscanf zu einem @ lesbuffer mit dieser Technik:

char buffer[64];

/* Read one line of text to buffer. */
scanf("%63[^\n]", buffer);

Aber was ist, wenn wir die Pufferlänge beim Schreiben des Codes nicht kennen? Was ist, wenn es sich um den Parameter einer Funktion handelt?

void function(FILE *file, size_t n, char buffer[n])
{
    /* ... */
    fscanf(file, "%[^\n]", buffer); /* WHAT NOW? */
}

Dieser Code istvulnerable, um Überläufe zu puffern wiefscanf weiß nicht, wie groß der Puffer ist.

Ich erinnere mich, dass ich das zuvor gesehen hatte und dachte, es sei die Lösung des Problems:

fscanf(file, "%*[^\n]", n, buffer);

Mein erster Gedanke war, dass die* im"%*[*^\n]" bedeutete, dass der maximalen Stringgröße ein Argument übergeben wird (in diesem Falln). Dies ist die Bedeutung des* imprintf.

Wenn ich die Dokumentation auf @ überprüft hascanf Ich fand heraus, dass es bedeutet, dassscanf sollte das Ergebnis von @ verwerf[^\n].

Dies hat mich etwas enttäuscht, da ich denke, dass es eine sehr nützliche Funktion wäre, die Puffergröße für @ dynamisch übergeben zu könnescanf.

Gibt es eine Möglichkeit, die Puffergröße an @ zu übergebescanf dynamisch?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage