Ich habe das folgende Codesegment in einem meiner Programme:Welche Größe sollte für Fgets verwendet werden?
char input[LINE_SIZE + 1]; /* +1 for '\0'. */
while(fgets(input, LINE_SIZE, stdin) != NULL)
{
/* Do stuff. */
}
In einer Frage, die seit gelöscht, es wurde mir darauf hingewiesen, dass mein Code möglicherweise fehlerhaft sein könnte. Ich deklariere Zeichenfolgen mit der "+ 1" -Notation, um den Code informativer und lesbarer zu machen (um sicherzustellen, dass ich nicht vergesse, den NULL-Terminator zu berücksichtigen, da dies früher ein Problem war). Allerdings wurde mir gesagt, dass die fgets
die exakt gleiche Größe für seinen zweiten Parameter verwenden sollte. Ich habe andere Beiträge hier gesehen, die die gleichen Praktiken wie ich machen.
Ich bin unsicher. Ist es eine schlechte Übung, das "+ 1" nicht auch in den fgets-Parameter aufzunehmen?
Das Plus/Minus 1 wird nicht benötigt. Schlage 'fgets (input, sizeof input, stdin)' vor, wenn 'input' ein Array ist. – chux
Warum einen Wert, den du * kennst *, um 1 überschreiten? Wenn man das gesagt hat, ist es in sicherer Richtung um 1, so dass es ein geringes tatsächliches Risiko darstellt. –
für 'char-Eingabe [LINE_SIZE + 1];', 'LINE_SIZE' ist die maximale Anzahl von Zeichen (ohne den Terminator), und' LINE_SIZE + 1' ist die tatsächliche Größe des Arrays. Für 'fgets()' übergeben Sie die Größe des Arrays ... es liest maximal ein Zeichen weniger als das und fügt den Terminator hinzu. – Dmitri