printf を使用して null で終わらない文字列を出力するにはどうすればよいですか?



実行時に文字列の長さがわかっていると仮定して、printf を使用して null で終わらない文字列を出力するにはどうすればよいですか?


答え:


printf("%.*s", length, string);

他の引数と一緒に使用:


printf("integer=%d, string=%.*s, number=%f", integer, length, string, number);
// ^^^^ ^^^^^^^^^^^^^^


C では、出力する最大長を %.123s で指定できます フォーマット。これは、出力の長さが最大で 123 文字であることを意味します。 123 * に置き換えることができます 、ハードコードされたのではなく、printf の引数から長さが取得されるようにします。


これは string を想定していることに注意してください %.123s のように、内部ヌル バイト (\0) は含まれません。 最大のみを制限します 正確ではない長さ 長さ、および文字列は引き続き null で終了するものとして扱われます。


null で終了しない文字列を内部 null で出力したい場合、単一の printf を使用することはできません。 fwrite を使用 代わりに:


fwrite(string, 1, length, stdout);

詳細な説明については、@M.S.Dousti の回答を参照してください。