Wie kann ich einen nicht nullterminierten String mit printf drucken, vorausgesetzt, ich kenne die Länge des Strings zur Laufzeit?
Antworten:
printf("%.*s", length, string);
Zusammen mit anderen Argumenten verwenden:
printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^
In C könnte man mit %.123s
die maximal auszugebende Länge angeben Format. Das heißt, die Ausgabelänge beträgt maximal 123 Zeichen. Die 123
könnte durch *
ersetzt werden , sodass die Länge aus dem Argument von printf genommen wird und nicht fest codiert.
Beachten Sie, dass dies den string
voraussetzt enthält keine inneren Nullbytes (\0), da %.123s
beschränkt nur das Maximum Länge nicht exakt Länge, und Strings werden weiterhin als nullterminiert behandelt.
Wenn Sie eine nicht nullterminierte Zeichenfolge mit innerer Null drucken möchten, können Sie kein einzelnes printf verwenden. Verwenden Sie fwrite
stattdessen:
fwrite(string, 1, length, stdout);
Eine ausführliche Erklärung finden Sie in der Antwort von @M.S.Dousti.