Wie drucke ich eine nicht nullterminierte Zeichenfolge mit printf?

Wie drucke ich eine nicht nullterminierte Zeichenfolge mit printf?


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.