#### 12.14.7 Other Input Conversions ¶

This section describes the miscellaneous input conversions.

The ‘`%p`’ conversion is used to read a pointer value. It recognizes the same syntax used by the ‘`%p`’ output conversion for `printf` (see Other Output Conversions); that is, a hexadecimal number just as the ‘`%x`’ conversion accepts. The corresponding argument should be of type `void **`; that is, the address of a place to store a pointer.

The resulting pointer value is not guaranteed to be valid if it was not originally written during the same program execution that reads it in.

The ‘`%n`’ conversion produces the number of characters read so far by this call. The corresponding argument should be of type `int *`, unless a type modifier is in effect (see Numeric Input Conversions). This conversion works in the same way as the ‘`%n`’ conversion for `printf`; see Other Output Conversions, for an example.

The ‘`%n`’ conversion is the only mechanism for determining the success of literal matches or conversions with suppressed assignments. If the ‘`%n`’ follows the locus of a matching failure, then no value is stored for it since `scanf` returns before processing the ‘`%n`’. If you store `-1` in that argument slot before calling `scanf`, the presence of `-1` after `scanf` indicates an error occurred before the ‘`%n`’ was reached.

Finally, the ‘`%%`’ conversion matches a literal ‘`%`’ character in the input stream, without using an argument. This conversion does not permit any flags, field width, or type modifier to be specified.