How do I print a non-null-terminated string using printf?

c, printf, string

Solution

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

Use together with other args:

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

In C you could specify the maximum length to output with the `%.123s` format. This means the output length is at most 123 chars. The `123` could be replaced by `*`, so that the length will be taken from the argument of printf instead of hard-coded.

Note that this assumes the `string` does not contain any interior null bytes (\0), as `%.123s` only constrains the maximum length not the exact length, and strings are still treated as null-terminated.

If you want to print a non-null-terminated string with interior null, you cannot use a single printf. Use `fwrite` instead:

fwrite(string, 1, length, stdout);

See @M.S.Dousti's answer for detailed explanation.

Problem

How can I print a non-null-terminated string using printf, assuming that I know the length of the string at runtime?

Original source

Related problems