  | 
		
Compaq C
Compaq C Run-Time Library Reference Manual for
OpenVMS Systems
 
 
  
Chapter 2 Understanding Input and Output
There are three types of input and output (I/O) in the Compaq C Run-Time Library  (RTL):
UNIX, Standard, and Terminal. Table 2-1 lists all the I/O functions
and macros found in the Compaq C RTL. For more detailed information on
each function and macro, see the Reference Section.  
 
  Table 2-1 I/O Functions and Macros
  
    | Function or Macro  | 
    Description  | 
   
  
    | UNIX I/O---Opening and Closing Files  | 
   
  
    | 
      
      close
      
     | 
    
      Closes the file associated with a file descriptor.
     | 
   
  
    | 
      
      creat
      
     | 
    
      Creates a new file.
     | 
   
  
    | 
      
      dup, dup2
      
     | 
    
      Allocates a new descriptor that refers to a file specified by a file
      descriptor returned by
      
      open
      
              ,
      
      creat
      
              , or
      
      pipe
      
              .
     | 
   
  
    | 
      
      open
      
     | 
    
      Opens a file and positions it at its beginning.
     | 
   
  
    | UNIX I/O---Reading from Files  | 
   
  
    | 
      
      read
      
     | 
    
      Reads bytes from a file and places them in a buffer.
     | 
   
  
    | UNIX I/O---Writing to Files  | 
   
  
    | 
      
      write
      
     | 
    
      Writes a specified number of bytes from a buffer to a file.
     | 
   
  
    | UNIX I/O---Maneuvering in Files  | 
   
  
    | 
      
      lseek
      
     | 
    
      Positions a stream file to an arbitrary byte position and returns the
      new position as an
      
      int
      
              .
     | 
   
  
    | UNIX I/O---Additional Standard I/O Functions and Macros  | 
   
  
    | 
      
      fstat, stat
      
     | 
    
      Accesses information about the file descriptor or the file
      specification.
     | 
   
  
    | 
      
      fsync
      
     | 
    
      Writes to disk any buffered information for the specified file.
     | 
   
  
    | 
      
      getname
      
     | 
    
      Returns the file specification associated with a file descriptor.
     | 
   
  
    | 
      
      isapipe
      
     | 
    
      Returns 1 if the file descriptor is associated with a pipe and 0 if it
      is not.
     | 
   
  
    | 
      
      isatty
      
     | 
    
      Returns 1 if the specified file descriptor is associated with a
      terminal and 0 if it is not.
     | 
   
  
    | 
      
      lwait
      
     | 
    
      Waits for completion of pending asynchronous I/O.
     | 
   
  
    | 
      
      ttyname
      
     | 
    
      Returns a pointer to the null-terminated name of the terminal device
      associated with file descriptor 0, the default input device.
     | 
   
  
    | Standard I/O---Opening and Closing Files  | 
   
  
    | 
      
      fclose
      
     | 
    
      Closes a function by flushing any buffers associated with the file
      control block, and freeing the file control block and buffers
      previously associated with the file pointer.
     | 
   
  
    | 
      
      fdopen
      
     | 
    
      Associates a file pointer with a file descriptor returned by an
      
      open
      
              ,
      
      creat
      
              ,
      
      dup
      
              ,
      
      dup2
      
              , or
      
      pipe
      
               function.
     | 
   
  
    | 
      
      fopen
      
     | 
    
      Opens a file by returning the address of a FILE structure.
     | 
   
  
    | 
      
      freopen
      
     | 
    
      Substitutes the file, named by a file specification, for the open file
      addressed by a file pointer.
     | 
   
  
    | Standard I/O---Reading from Files  | 
   
  
    | 
      
      fgetc, getc, fgetwc, getw, getwc
      
     | 
    
      Returns characters from a specified file.
     | 
   
  
    | 
      
      fgets, fgetws
      
     | 
    
      Reads a line from a specified file and stores the string in an argument.
     | 
   
  
    | 
      
      fread
      
     | 
    
      Reads a specified number of items from a file.
     | 
   
  
    | 
      
      fscanf, fwscanf
      
     | 
    
      Performs formatted input from a specified file.
     | 
   
  
    | 
      
      sscanf, swscanf
      
     | 
    
      Performs formatted input from a character string in memory.
     | 
   
  
    | 
      
      ungetc, ungetwc
      
     | 
    
      Pushes back a character into the input stream and leaves the stream
      positioned before the character.
     | 
   
  
    | Standard I/O---Writing to Files  | 
   
  
    | 
      
      fprintf, fwprintf, vfprintf, vfwprintf
      
     | 
    
      Performs formatted output to a specified file.
     | 
   
  
    | 
      
      fputc, putc, putw, putwc, fputwc
      
     | 
    
      Writes characters to a specified file.
     | 
   
  
    | 
      
      fputs, fputws
      
     | 
    
      Writes a character string to a file without copying the string's null
      terminator.
     | 
   
  
    | 
      
      fwrite
      
     | 
    
      Writes a specified number of items to a file.
     | 
   
  
    | 
      
      sprintf, swprintf, vsprintf, vswprintf
      
     | 
    
      Performs formatted output to a string in memory.
     | 
   
  
    | Standard I/O---Maneuvering in Files  | 
   
  
    | 
      
      fflush
      
     | 
    
      Sends any buffered information for the specified file to RMS.
     | 
   
  
    | 
      
      fgetpos
      
     | 
    
      Stores the current value of the file position indicator for the stream.
     | 
   
  
    | 
      
      fsetpos
      
     | 
    
      Sets the file position indicator for the stream according to the value
      of the object pointed to.
     | 
   
  
    | 
      
      fseek
      
     | 
    
      Positions the file to the specified byte offset in the file.
     | 
   
  
    | 
      
      ftell
      
     | 
    
      Returns the current byte offset to the specified stream file.
     | 
   
  
    | 
      
      rewind
      
     | 
    
      Sets the file to its beginning.
     | 
   
  
    | Standard I/O---Additional Standard I/O Functions and Macros  | 
   
  
    | 
      
      access
      
     | 
    
      Checks a file to see whether a specified access mode is allowed.
     | 
   
  
    | 
      
      clearerr
      
     | 
    
      Resets the error and end-of-file indications for a file.
     | 
   
  
    | 
      
      feof
      
     | 
    
      Tests a file to see if the end-of-file has been reached.
     | 
   
  
    | 
      
      ferror
      
     | 
    
      Returns a nonzero integer if an error has occurred while reading or
      writing a file.
     | 
   
  
    | 
      
      fgetname
      
     | 
    
      Returns the file specification associated with a file pointer.
     | 
   
  
    | 
      
      fileno
      
     | 
    
      Returns an integer file descriptor that identifies the specified file.
     | 
   
  
    | 
      
      ftruncate
      
     | 
    
      Truncates a file at the specified position.
     | 
   
  
    | 
      
      fwait
      
     | 
    
      Waits for completion of pending asynchcronous I/O.
     | 
   
  
    | 
      
      fwide
      
     | 
    
      Sets the orientation a stream.
     | 
   
  
    | 
      
      mktemp
      
     | 
    
      Creates a unique file name from a template.
     | 
   
  
    | 
      
      remove, delete
      
     | 
    
      Deletes a file.
     | 
   
  
    | 
      
      rename
      
     | 
    
      Gives a new name to an existing file.
     | 
   
  
    | 
      
      setbuf, setvbuf
      
     | 
    
      Associates a buffer with an input or output file.
     | 
   
  
    | 
      
      tmpfile
      
     | 
    
      Creates a temporary file that is opened for update.
     | 
   
  
    | 
      
      tmpnam
      
     | 
    
      Creates a character string that can be used in place of the file-name
      argument in other function calls.
     | 
   
  
    | Terminal I/O---Reading from Files  | 
   
  
    | 
      
      getchar, getwchar
      
     | 
    
      Reads a single character from the standard input (stdin).
     | 
   
  
    | 
      
      gets
      
     | 
    
      Reads a line from the standard input (stdin).
     | 
   
  
    | 
      
      scanf, wscanf
      
     | 
    
      Performs formatted input from the standard input.
     | 
   
  
    | Terminal I/O---Writing to Files  | 
   
  
    | 
      
      printf, wprintf, vprintf, vwprintf
      
     | 
    
      Performs formatted output to the standard output (stdout).
     | 
   
  
    | 
      
      putchar, putwchar
      
     | 
    
      Writes a single character to the standard output and returns the
      character.
     | 
   
  
    | 
      
      puts
      
     | 
    
      Writes a character string to the standard output followed by a new-line
      character.
     | 
   
 
2.1 Using RMS from RTL Routines
When you create a file using the Compaq C RTL I/O functions and
macros, you can supply values for many RMS file attributes, including:
 
  - Allocation quantity
  
 - Block size
  
 - Default file extension
  
 - Default file name
  
 - File access context options
  
 - File-processing options
  
 - File-sharing options
  
 - Multiblock count
  
 - Multibuffer count
  
 - Maximum record size
  
 - Record attributes
  
 - Record format
  
 - Record-processing options
  
See the description of the
creat
 function in the Reference Section for information on these values.
 
Other functions that allow you to set these values include
open
,
fopen
, and
freopen
.
 
For more information about RMS, see the Compaq C User's Guide for OpenVMS Systems.
 2.2 UNIX I/O and Standard I/O
UNIX I/O functions are UNIX system services, now standardized by ISO
POSIX-1 (the ISO Portable Operating System Interface).
 
UNIX I/O functions use file descriptors to access files. A file
descriptor is an integer that identifies the file. A file
descriptor is declared in the following way, where file_desc
is the name of the file descriptor:
 
 
UNIX I/O functions, such as
creat
, associate the file descriptor with a file. Consider the following
example:
 
 
  
    
       
      
file_desc1 = creat("INFILE.DAT", 0, "rat=cr", "rfm=var");
 |   
This statement creates the file, INFILE.DAT, with file access mode 0,
carriage-return control, variable-length records, and it associates the
variable
file_desc1
 with the file. When the file is accessed for other operations, such as
 reading or writing, the file descriptor is used to refer to the file.
 For example:
 
 
  
    
       
      
write(file_desc1, buffer, sizeof(buffer));
 
 |   
This statement writes the contents of the buffer to INFILE.DAT.
 
There may be circumstances when you should use UNIX I/O functions and
macros instead of the Standard I/O functions and macros. For a detailed
discussion of both forms of I/O and how they manipulate the RMS file
formats, see Chapter 1.
 
Standard I/O functions are specified by the ANSI C Standard.
 
Standard I/O functions add buffering to the features of UNIX I/O and
use file pointers to access files. A file pointer is an object
of type
FILE *
, which is a typedef defined in the
<stdio.h>
 header file as follows:
 
 
  
    
       
      
typedef  struct  _iobuf  *FILE;
 
 |   
The
_iobuf
 identifier is also defined in
<stdio.h>
.
 
To declare a file pointer, use the following:
 
 
You use the Standard I/O
fopen
 function to create or open an existing file. For example:
 
 
  
    
       
      
#include <stdio.h>
main()
{
   FILE  *outfile;
   outfile  =  fopen("DISKFILE.DAT", "w+");
      .
      .
      .
}
 |   
Here, the file DISKFILE.DAT is opened for write-update access.
 
The Compaq C RTL provides the following functions for converting
between file descriptors and file pointers:
 
  - 
fileno
---returns the file descriptor associated with the specified file
pointer.
  
 - 
fdopen
---associates a file pointer with a file descriptor returned by an
open
,
creat
,
dup
,
dup2
, or
pipe
function.
  
2.3 Wide-Character Versus Byte I/O Functions
The wide-character I/O functions provide operations analogous to most
of the byte I/O functions, except that the fundamental units internal
to the wide-character functions are wide characters.
 
However, the external representation (in files) is a sequence of
multibyte characters, not wide characters. For the wide-character
formatted input and output functions:
 
  - The wide-character formatted input functions (such as
fwscanf
) always read a sequence of multibyte characters from files, regardless
of the specified directive and, before any further processing, convert
this sequence to a sequence of wide characters.
  
 - The wide-character formatted output functions (such as
fwprintf
) write wide characters to output files by first converting
wide-character argument types to a sequence of multibyte characters,
then calling the underlying operating system output primitives.
  
Byte I/O functions cannot handle state-dependent encodings.
Wide-character I/O functions can. They accomplish this by associating
each wide-character stream with a conversion-state object of type
mbstate_t
.
 
The wide-character I/O functions are:
 
 
  
    
       
      
fgetwc        fputwc        fwscanf       fwprintf       ungetwc
fgetws        fputws        wscanf        wprintf
getwc         putwc                       vfwprintf
getwchar      putwchar                    vwprintf
 
 |   
The byte I/O functions are:
 
 
  
    
       
      
fgetc         fputc         fscanf        fprintf         ungetc
fgets         fputs         scanf         printf          fread
getc          putc                        vfprinf         fwrite
gets          puts                        vprintf
getchar       putchar
 
 |   
The wide-character input functions read multibyte characters from the
stream and convert them to wide characters as if they were read by
successive calls to the
fgetwc
 function. Each conversion occurs as a call were made to the
mbrtowc
 function with the conversion state described by the stream's own
mbstate_t
 object.
 
The wide-character output functions convert wide characters to
multibyte characters and write them to the stream as if they were
written by successive calls to the
fputwc
 function. Each conversion occurs as if a call were made to the
wcrtomb
 function, with the conversion state described by the I/O stream's own
mbstate_t
 object.
 
If a wide-character I/O function encounters an invalid multibyte
character, the function sets
errno
 to the value EILSEQ.
 2.4 Conversion Specifications
Several of the Standard I/O functions (including the Terminal I/O
functions) use conversion specifications to specify data formats for
I/O. These functions are the formatted-input and formatted-output
functions. Consider the following example:
 
 
  
    
       
      
int     x = 5.0;
FILE    *outfile;
   .
   .
   .
fprintf(outfile, "The answer is %d.\n", x);
 
 |   
The decimal value of the variable
x
 replaces the conversion specification
%d
 in the string to be written to the file associated with the identifier
 outfile.
 
Each conversion specification begins with a percent sign (%) and ends
with a conversion specifier, which is a character that
specifies the type of conversion to be performed. Optional characters
can appear between the percent sign and the conversion specifier.
 
For the wide-character formatted I/O functions, the conversion
specification is a string of wide characters. For the byte I/O
equivalent functions, it is a string of bytes.
 
 Sections 2.4.1 and 2.4.2 describe these optional
 characters and conversion specifiers.
 2.4.1 Converting Input Information
The format specification string for the input of information can
include three kinds of items:
 
  - White-space characters (spaces, tabs, and new-line characters),
  which match optional white-space characters in the input field.
  
 - Ordinary characters (not %), which must match the next
  nonwhite-space character in the input.
  
 - Conversion specifications, which govern the conversion of the
  characters in an input field and their assignment to an object
  indicated by a corresponding input pointer.
  
Each input pointer is an address expression indicating an object whose
type matches that of a corresponding conversion specification.
Conversion specifications form part of the format string. The indicated
object is the target that receives the input value. There must be as
many input pointers as there are conversion specifications, and the
addressed objects must match the types of the conversion specifications.
 
A conversion specification consists of the following characters, in the
order listed:
 
  -  A percent character (%) or the sequence %n$ (where
  n is an integer), 
 The sequence %n$ denotes that
  the conversion is applied to the nth input pointer listed,
  where n is a decimal integer between [1, NL_ARGMAX] (see the
<limits.h>
 header file). For example, a conversion specification beginning %5$
 means that the conversion will be applied to the 5th input pointer
 listed after the format specification. The sequence %$ is invalid.
  If the conversion specification does not begin with the sequence
 %n$, the conversion specification is matched to its input
 pointer in left-to-right order. You should only use one type of
 conversion specification (% or %n$) in a format specification.
   - One or more optional characters (described in Table 2-2).
  
 - A conversion specifier (described in Table 2-3).
  
Table 2-2 shows the characters you can use between the percent sign
(%) (or the sequence %n$), and the conversion specifier. These
characters are optional but, if specified, must occur in the order
shown in Table 2-2.
 
 
  Table 2-2 Optional Characters Between% (or% n$) and the Input Conversion Specifier
  
    | Character  | 
    Meaning  | 
   
  
    | 
      *
     | 
    
      An assignment-suppressing character.
     | 
   
  
    | 
      field width
     | 
    
      A nonzero decimal integer that specifies the maximum field width.
       For the wide-character input functions, the field width is measured
      in wide characters.
       For the byte input functions, the field width is measured in bytes,
      unless the directive is one of the following:
      
%lc, %ls, %C, %S, %[
 
 
       In these cases, the field width is measured in multibyte character
      units.
      | 
   
  
    | 
      h, l, or L (or ll)
     | 
    
      Precede a conversion specifier of d, i, or n with an h if the
      corresponding argument is a pointer to
      
      short int
      
               rather than a pointer to
      
      int
      
              ; with an l (lowercase ell) if it is a pointer to
      
      long int
      
              ; or, for
      OpenVMS Alpha systems only, with an L or ll (two lowercase
      ells) if it is a pointer to
      
      __int64
      
              .
       Precede a conversion specifier of o, u, or x with an h if the
      corresponding argument is a pointer to
      
      unsigned short int
      
               rather than a pointer to
      
      unsigned int
      
              ; with an l if it is a pointer to
      
      unsigned long int
      
              ; or, for
      OpenVMS Alpha systems only, with an L or ll if it is a pointer
      to
      
      unsigned __int64
      
              .
       Precede a conversion specifier of c, s, or [ with an l (lower ell)
      if the corresponding argument is a pointer to a
      
      wchar_t
      
              .
       Finally, precede a conversion specifier of e, f, or g with an l
      (lowercase ell) if the corresponding argument is a pointer to
      
      double
      
               rather than a pointer to
      
      float
      
              , or with an L if it is a pointer to
      
      long double
      
              .
       If an h, l, L, or ll appears with any other conversion specifier,
      the behavior is undefined.
      | 
   
 
Table 2-3 describes the conversion specifiers for formatted input.
 
 
  Table 2-3 Conversion Specifiers for Formatted Input
  
    | Specifier  | 
    Input Type1  | 
    Description  | 
   
  
    | 
      d
     | 
    
       
     | 
    
      Expects a decimal integer in the input whose format is the same as
      expected for the subject sequence of the
      
      strtol
      
               function with the value 10 for the
      
      base
      
               argument. The corresponding argument must be a pointer to
      
      int
      
              .
     | 
   
  
    | 
      i
     | 
    
       
     | 
    
      Expects an integer whose type is determined by the leading input
      characters. A leading 0 is equated to octal, a leading 0X or 0x is
      equated to hexadecimal, and all other forms are equated to decimal. The
      corresponding argument must be a pointer to
      
      int
      
              .
     | 
   
  
    | 
      o
     | 
    
       
     | 
    
      Expects an octal integer in the input (with or without a leading 0).
      The corresponding argument must be a pointer to
      
      int
      
              .
     | 
   
  
    | 
      u
     | 
    
       
     | 
    
      Expects a decimal integer in the input whose format is the same as
      expected for the subject sequence of the
      
      strtoul
      
               function with the value 10 for the
      
      base
      
               argument.
     | 
   
  
    | 
      x
     | 
    
       
     | 
    
      Expects a hexadecimal integer in the input (with or without a leading
      0x). The corresponding argument must be a pointer to
      
      unsigned int
      
              .
     | 
   
  
    | 
      c
     | 
    
      Byte
     | 
    
      Expects a single byte in the input. The corresponding argument must be
      a pointer to
      
      char
      
              .
       If a field width precedes the c conversion specifier, the number of
      characters specified by the field width is read. In this case, the
      corresponding argument must be a pointer to an array of
      
      char
      
              .
       If the optional character l (lowercase ell) precedes this conversion
      specifier, then the specifier expects a multibyte character in the
      input which is converted into a wide-character code.
       The corresponding argument must be a pointer to type
      
      wchar_t
      
              . If a field width also precedes the c conversion specifier, the number
              of characters specified by the field width is read. In this case, the
              corresponding argument must be a pointer to an array of
      
      wchar_t
      
              .
      | 
   
  
    | 
       
     | 
    
      Wide-character
     | 
    
      Expects a sequence of the number of characters specified in the
      optional field width; this is 1 if not specified.
       If no l (lowercase ell) precedes the c specifier, then the
      corresponding argument must be a pointer to an array of
      
      char
      
              .
       If an l (lowercase ell) precedes the c specifier, the corresponding
      argument must be a pointer to an array of
      
      wchar_t
      
              .
      | 
   
  
    | 
      C
     | 
    
      Byte
     | 
    
       The specifier expects a multibyte character in the input, which is
       converted into a wide-character code. The corresponding argument must
       be a pointer to type
      
      wchar_t
      
              .
       If a field width also precedes the C conversion specifier, the
      number of characters specified by the field width is read. In this
      case, the corresponding argument must be a pointer to an array of
      
      wchar_t
      
              .
      | 
   
  
    | 
       
     | 
    
      Wide-character
     | 
    
      Expects a sequence of the number of characters specified in the
      optional field width; this is 1 if not specified. The corresponding
      argument must be a pointer to an array of
      
      wchar_t
      
              .
     | 
   
  
    | 
      s
     | 
    
      Byte
     | 
    
      Expects a sequences of bytes in the input. The corresponding argument
      must be a pointer to an array of characters that is large enough to
      contain the sequence and a terminating null character (\0) that is
      automatically added. The input field is terminated by a space, tab, or
      new-line character.
       If the optional character l (ell) precedes this conversion
      specifier, the specifier expects a sequence of multibyte characters in
      the input, which are converted to wide-character codes. The
      corresponding argument must be a pointer to an array of wide characters
      (type
      
      wchar_t
      
              ) that is large enough to contain the sequence plus the terminating
              null wide-character code that is automatically added. The input field
              is terminated by a space, tab, or new-line character.
      | 
   
  
    | 
       
     | 
    
      Wide-character
     | 
    
      Expects (conceptually) a sequence of nonwhite-space characters in the
      input.
       If no l (lowercase ell) precedes the s specifier, then the
      corresponding argument must be a pointer to an array of
      
      char
      
               large enough to contain the sequence plus the terminating null byte
               that is automatically added.
       If an l (lowercase ell) precedes the s specifier, then the
      corresponding argument must be a pointer to an array of
      
      wchar_t
      
               large enough to contain the sequence plus the terminating null wide
               character that is automatically added.
      | 
   
  
    | 
      S
     | 
    
      Byte
     | 
    
       The specifier expects a sequence of multibyte characters in the input,
       which are converted to wide-character codes. The corresponding argument
       must be a pointer to an array of wide characters (type
      
      wchar_t
      
              ) that is large enough to contain the sequence plus a terminating null
              wide-character code which is added automatically. The input field is
              terminated by a space, tab, or new-line character.
     | 
   
  
    | 
       
     | 
    
      Wide-character
     | 
    
      Expects a sequence of nonwhite-space characters in the input. The
      corresponding argument must be a pointer to an array of
      
      wchar_t
      
               large enough to contain the sequence plus the terminating null wide
               character that is automatically added.
     | 
   
  
    | 
      e, f, g
     | 
    
       
     | 
    
      Expects a floating-point number in the input. The corresponding
      argument must be a pointer to
      
      float
      
              . The input format for floating-point numbers is: [<pm
              symbol>]nnn[radix][ddd][{E|e}[<pm symbol>]nn]. The n's and d's
              are decimal digits (as many as indicated by the field width minus the
              signs and the letter E). The radix character is defined in the current
              locale.
     | 
   
  
    | 
      [...]
     | 
    
       
     | 
    
       Expects a nonempty sequence of characters that is not delimited by a
       white-space character. The brackets enclose a set of characters (the
      scanset) expected in the input sequence. Any character in the
      input sequence that does not match a character in the scanset
      terminates the character sequence.
       All characters between the brackets comprise the scanset, unless the
      first character after the left bracket is a circumflex (^). In this
      case, the scanset contains all characters other than those that appear
      between the circumflex and the right bracket. Any character that
      does appear between the circumflex and the right bracket will
      terminate the input character sequence.
       If the conversion specifier begins with [] or [^], the right bracket
      character is in the scanset and the next right bracket character is the
      matching right bracket that ends the specification; otherwise, the
      first right bracket character ends the specification.
      | 
   
  
    | 
       
     | 
    
      Byte
     | 
    
      If an l (lowercase ell) does not precede the [ specifier, then the
      characters in the scanset must be single-byte characters only. In this
      case, the corresponding argument must be a pointer to an array of
      
      char
      
               large enough to accept the sequence and the terminating null byte which
               is automatically added.
       If an l (lowercase ell) does precede the [ specifier, the characters
      in the input sequence are considered to be multibyte characters, which
      are then converted to a wide-character sequence for further processing.
      If character ranges are specified in the scanset, then the processing
      is done according to the LC_COLLATE category of the current program's
      locale. In this case, the corresponding argument must be a pointer to
      an array of
      
      wchar_t
      
               large enough to accept the sequence and the terminating null wide
               character which is automatically added.
      | 
   
  
    | 
       
     | 
    
      Wide-character
     | 
    
       If no l (lowercase ell) precedes the [ conversion specifier, then
       processing is the same as described for the Byte-input type of the %l[
       specifier, except that the corresponding argument must be an array of
      
      char
      
               large enough to accept the multibyte sequence plus the terminating null
               byte that is automatically added.
       If an l (lowercase ell) precedes the [ conversion specifier, then
      processing is the same as the preceding paragraph except that the
      corresponding argument must be an array of
      
      wchar_t
      
               large enough to accept the wide-character sequence plus the terminating
               null wide character that is automatically added.
      | 
   
  
    | 
      p
     | 
    
       
     | 
    
      Requires an argument that is a pointer to
      
      void
      
              . The input value is interpreted as a hexadecimal value.
     | 
   
  
    | 
      n
     | 
    
       
     | 
    
      No input is consumed. The corresponding argument is a pointer to an
      integer. The integer is assigned the number of characters read from the
      input stream so far by this call to the formatted input function.
      Execution of a %n directive does not increment the assignment count
      returned when the formatted input function completes execution.
     | 
   
  
    | 
      %
     | 
    
       
     | 
    
      Matches a single percent symbol. No conversion or assignment takes
      place. The complete conversion specification would be %%.
     | 
   
 
 
1Either Byte or Wide-character. Where
neither is shown for a given specifier, the specifier description
applies to both.
 
 
  
  
  
		 |