| .\" Copyright (c) 1990, 1991 The Regents of the University of California. |
| .\" All rights reserved. |
| .\" |
| .\" This code is derived from software contributed to Berkeley by |
| .\" Chris Torek and the American National Standards Committee X3, |
| .\" on Information Processing Systems. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that the following conditions |
| .\" are met: |
| .\" 1. Redistributions of source code must retain the above copyright |
| .\" notice, this list of conditions and the following disclaimer. |
| .\" 2. Redistributions in binary form must reproduce the above copyright |
| .\" notice, this list of conditions and the following disclaimer in the |
| .\" documentation and/or other materials provided with the distribution. |
| .\" 3. All advertising materials mentioning features or use of this software |
| .\" must display the following acknowledgement: |
| .\" This product includes software developed by the University of |
| .\" California, Berkeley and its contributors. |
| .\" 4. Neither the name of the University nor the names of its contributors |
| .\" may be used to endorse or promote products derived from this software |
| .\" without specific prior written permission. |
| .\" |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
| .\" SUCH DAMAGE. |
| .\" |
| .\" @(#)scanf.3 6.14 (Berkeley) 1/8/93 |
| .\" |
| .\" Converted for Linux, Mon Nov 29 15:22:01 1993, faith@cs.unc.edu |
| .\" modified to resemble the GNU libio setup used in the Linux libc |
| .\" used in versions 4.x (x>4) and 5 Helmut.Geyer@iwr.uni-heidelberg.de |
| .\" Modified, aeb, 970121 |
| .\" 2005-07-14, mtk, added description of %n$ form; various text |
| .\" incorporated from the GNU C library documentation ((C) The |
| .\" Free Software Foundation); other parts substantially rewritten. |
| .\" |
| .\" 2008-06-23, mtk |
| .\" Add ERRORS section. |
| .\" Document the 'a' and 'm' modifiers for dynamic string allocation. |
| .\" |
| .TH SCANF 3 2011-09-28 "GNU" "Linux Programmer's Manual" |
| .SH NAME |
| scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf \- input format conversion |
| .SH SYNOPSIS |
| .nf |
| .B #include <stdio.h> |
| |
| .BI "int scanf(const char *" format ", ...);" |
| .BI "int fscanf(FILE *" stream ", const char *" format ", ...);" |
| .BI "int sscanf(const char *" str ", const char *" format ", ...);" |
| .sp |
| .B #include <stdarg.h> |
| |
| .BI "int vscanf(const char *" format ", va_list " ap ); |
| .BI "int vsscanf(const char *" str ", const char *" format ", va_list " ap ); |
| .BI "int vfscanf(FILE *" stream ", const char *" format ", va_list " ap ); |
| .fi |
| .sp |
| .in -4n |
| Feature Test Macro Requirements for glibc (see |
| .BR feature_test_macros (7)): |
| .in |
| .ad l |
| .sp |
| .BR vscanf (), |
| .BR vsscanf (), |
| .BR vfscanf (): |
| .RS 4 |
| _XOPEN_SOURCE\ >=\ 600 || _ISOC99_SOURCE || |
| _POSIX_C_SOURCE\ >=\ 200112L; |
| .br |
| or |
| .I "cc -std=c99" |
| .ad |
| .RE |
| .SH DESCRIPTION |
| The |
| .BR scanf () |
| family of functions scans input according to |
| .I format |
| as described below. |
| This format may contain |
| .IR "conversion specifications" ; |
| the results from such conversions, if any, |
| are stored in the locations pointed to by the |
| .I pointer |
| arguments that follow |
| .IR format . |
| Each |
| .I pointer |
| argument must be of a type that is appropriate for the value returned |
| by the corresponding conversion specification. |
| |
| If the number of conversion specifications in |
| .I format |
| exceeds the number of |
| .I pointer |
| arguments, the results are undefined. |
| If the number of |
| .I pointer |
| arguments exceeds the number of conversion specifications, then the excess |
| .I pointer |
| arguments are evaluated, but are otherwise ignored. |
| |
| The |
| .BR scanf () |
| function reads input from the standard input stream |
| .IR stdin , |
| .BR fscanf () |
| reads input from the stream pointer |
| .IR stream , |
| and |
| .BR sscanf () |
| reads its input from the character string pointed to by |
| .IR str . |
| .PP |
| The |
| .BR vfscanf () |
| function is analogous to |
| .BR vfprintf (3) |
| and reads input from the stream pointer |
| .I stream |
| using a variable argument list of pointers (see |
| .BR stdarg (3). |
| The |
| .BR vscanf () |
| function scans a variable argument list from the standard input and the |
| .BR vsscanf () |
| function scans it from a string; these are analogous to the |
| .BR vprintf (3) |
| and |
| .BR vsprintf (3) |
| functions respectively. |
| .PP |
| The |
| .I format |
| string consists of a sequence of |
| .I directives |
| which describe how to process the sequence of input characters. |
| If processing of a directive fails, no further input is read, and |
| .BR scanf () |
| returns. |
| A "failure" can be either of the following: |
| .IR "input failure" , |
| meaning that input characters were unavailable, or |
| .IR "matching failure" , |
| meaning that the input was inappropriate (see below). |
| |
| A directive is one of the following: |
| .TP |
| \(bu |
| A sequence of white-space characters (space, tab, newline, etc.; see |
| .BR isspace (3)). |
| This directive matches any amount of white space, |
| including none, in the input. |
| .TP |
| \(bu |
| An ordinary character (i.e., one other than white space or \(aq%\(aq). |
| This character must exactly match the next character of input. |
| .TP |
| \(bu |
| A conversion specification, |
| which commences with a \(aq%\(aq (percent) character. |
| A sequence of characters from the input is converted according to |
| this specification, and the result is placed in the corresponding |
| .I pointer |
| argument. |
| If the next item of input does not match the conversion specification, |
| the conversion fails\(emthis is a |
| .IR "matching failure" . |
| .PP |
| Each |
| .I conversion specification |
| in |
| .I format |
| begins with either the character \(aq%\(aq or the character sequence |
| "\fB%\fP\fIn\fP\fB$\fP" |
| (see below for the distinction) followed by: |
| .TP |
| \(bu |
| An optional \(aq*\(aq assignment-suppression character: |
| .BR scanf () |
| reads input as directed by the conversion specification, |
| but discards the input. |
| No corresponding |
| .I pointer |
| argument is required, and this specification is not |
| included in the count of successful assignments returned by |
| .BR scanf (). |
| .TP |
| \(bu |
| An optional \(aqa\(aq character. |
| This is used with string conversions, and relieves the caller of the |
| need to allocate a corresponding buffer to hold the input: instead, |
| .BR scanf () |
| allocates a buffer of sufficient size, |
| and assigns the address of this buffer to the corresponding |
| .I pointer |
| argument, which should be a pointer to a |
| .I "char *" |
| variable (this variable does not need to be initialized before the call). |
| The caller should subsequently |
| .BR free (3) |
| this buffer when it is no longer required. |
| This is a GNU extension; |
| C99 employs the \(aqa\(aq character as a conversion specifier (and |
| it can also be used as such in the GNU implementation). |
| .TP |
| \(bu |
| An optional decimal integer which specifies the |
| .IR "maximum field width" . |
| Reading of characters stops either when this maximum is reached or |
| when a nonmatching character is found, whichever happens first. |
| Most conversions discard initial white space characters (the exceptions |
| are noted below), |
| and these discarded characters don't count toward the maximum field width. |
| String input conversions store a terminating null byte (\(aq\\0\(aq) |
| to mark the end of the input; |
| the maximum field width does not include this terminator. |
| .TP |
| \(bu |
| An optional |
| .IR "type modifier character" . |
| For example, the |
| .B l |
| type modifier is used with integer conversions such as |
| .B %d |
| to specify that the corresponding |
| .I pointer |
| argument refers to a |
| .I "long int" |
| rather than a pointer to an |
| .IR int . |
| .TP |
| \(bu |
| A |
| .I "conversion specifier" |
| that specifies the type of input conversion to be performed. |
| .PP |
| The conversion specifications in |
| .I format |
| are of two forms, either beginning with \(aq%\(aq or beginning with |
| "\fB%\fP\fIn\fP\fB$\fP". |
| The two forms should not be mixed in the same |
| .I format |
| string, except that a string containing |
| "\fB%\fP\fIn\fP\fB$\fP" |
| specifications can include |
| .B %% |
| and |
| .BR %* . |
| If |
| .I format |
| contains \(aq%\(aq |
| specifications then these correspond in order with successive |
| .I pointer |
| arguments. |
| In the |
| "\fB%\fP\fIn\fP\fB$\fP" |
| form (which is specified in POSIX.1-2001, but not C99), |
| .I n |
| is a decimal integer that specifies that the converted input should |
| be placed in the location referred to by the |
| .IR n -th |
| .I pointer |
| argument following |
| .IR format . |
| .SS Conversions |
| The following |
| .I "type modifier characters" |
| can appear in a conversion specification: |
| .TP |
| .B h |
| Indicates that the conversion will be one of |
| \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, or \fBn\fP |
| and the next pointer is a pointer to a |
| .I short int |
| or |
| .I unsigned short int |
| (rather than |
| .IR int ). |
| .TP |
| .B hh |
| As for |
| .BR h , |
| but the next pointer is a pointer to a |
| .I signed char |
| or |
| .IR "unsigned char" . |
| .TP |
| .B j |
| As for |
| .BR h , |
| but the next pointer is a pointer to an |
| .I intmax_t |
| or a |
| .IR uintmax_t . |
| This modifier was introduced in C99. |
| .TP |
| .B l |
| Indicates either that the conversion will be one of |
| \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, \fBX\fP, or \fBn\fP |
| and the next pointer is a pointer to a |
| .I long int |
| or |
| .I unsigned long int |
| (rather than |
| .IR int ), |
| or that the conversion will be one of |
| \fBe\fP, \fBf\fP, or \fBg\fP |
| and the next pointer is a pointer to |
| .I double |
| (rather than |
| .IR float ). |
| Specifying two |
| .B l |
| characters is equivalent to |
| .BR L . |
| If used with |
| .B %c |
| or |
| .B %s |
| the corresponding parameter is considered |
| as a pointer to a wide character or wide-character string respectively. |
| .\" This use of l was introduced in Amendment 1 to ISO C90. |
| .TP |
| .B L |
| Indicates that the conversion will be either |
| \fBe\fP, \fBf\fP, or \fBg\fP |
| and the next pointer is a pointer to |
| .I "long double" |
| or the conversion will be |
| \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, or \fBx\fP |
| and the next pointer is a pointer to |
| .IR "long long" . |
| .\" MTK, Jul 05: The following is no longer true for modern |
| .\" ANSI C (i.e., C99): |
| .\" (Note that long long is not an |
| .\" ANSI C |
| .\" type. Any program using this will not be portable to all |
| .\" architectures). |
| .TP |
| .B q |
| equivalent to |
| .BR L . |
| This specifier does not exist in ANSI C. |
| .TP |
| .B t |
| As for |
| .BR h , |
| but the next pointer is a pointer to a |
| .IR ptrdiff_t . |
| This modifier was introduced in C99. |
| .TP |
| .B z |
| As for |
| .BR h , |
| but the next pointer is a pointer to a |
| .IR size_t . |
| This modifier was introduced in C99. |
| .PP |
| The following |
| .I "conversion specifiers" |
| are available: |
| .TP |
| .B % |
| Matches a literal \(aq%\(aq. |
| That is, |
| .B %\&% |
| in the format string matches a |
| single input \(aq%\(aq character. |
| No conversion is done (but initial white space characters are discarded), |
| and assignment does not occur. |
| .TP |
| .B d |
| Matches an optionally signed decimal integer; |
| the next pointer must be a pointer to |
| .IR int . |
| .TP |
| .B D |
| Equivalent to |
| .IR ld ; |
| this exists only for backward compatibility. |
| (Note: thus only in libc4. |
| In libc5 and glibc the |
| .B %D |
| is silently ignored, causing old programs to fail mysteriously.) |
| .TP |
| .B i |
| Matches an optionally signed integer; the next pointer must be a pointer to |
| .IR int . |
| The integer is read in base 16 if it begins with |
| .I 0x |
| or |
| .IR 0X , |
| in base 8 if it begins with |
| .IR 0 , |
| and in base 10 otherwise. |
| Only characters that correspond to the base are used. |
| .TP |
| .B o |
| Matches an unsigned octal integer; the next pointer must be a pointer to |
| .IR "unsigned int" . |
| .TP |
| .B u |
| Matches an unsigned decimal integer; the next pointer must be a |
| pointer to |
| .IR "unsigned int" . |
| .TP |
| .B x |
| Matches an unsigned hexadecimal integer; the next pointer must |
| be a pointer to |
| .IR "unsigned int" . |
| .TP |
| .B X |
| Equivalent to |
| .BR x . |
| .TP |
| .B f |
| Matches an optionally signed floating-point number; the next pointer must |
| be a pointer to |
| .IR float . |
| .TP |
| .B e |
| Equivalent to |
| .BR f . |
| .TP |
| .B g |
| Equivalent to |
| .BR f . |
| .TP |
| .B E |
| Equivalent to |
| .BR f . |
| .TP |
| .B a |
| (C99) Equivalent to |
| .BR f . |
| .TP |
| .B s |
| Matches a sequence of non-white-space characters; |
| the next pointer must be a pointer to character array that is |
| long enough to hold the input sequence and |
| the terminating null byte (\(aq\\0\(aq), which is added automatically. |
| The input string stops at white space or at the maximum field |
| width, whichever occurs first. |
| .TP |
| .B c |
| Matches a sequence of characters whose length is specified by the |
| .I maximum field width |
| (default 1); the next pointer must be a pointer to |
| .IR char , |
| and there must be enough room for all the characters (no terminating |
| null byte |
| is added). |
| The usual skip of leading white space is suppressed. |
| To skip white space first, use an explicit space in the format. |
| .TP |
| .B \&[ |
| Matches a nonempty sequence of characters from the specified set of |
| accepted characters; the next pointer must be a pointer to |
| .IR char , |
| and there must be enough room for all the characters in the string, plus a |
| terminating null byte. |
| The usual skip of leading white space is suppressed. |
| The string is to be made up of characters in (or not in) a particular set; |
| the set is defined by the characters between the open bracket |
| .B [ |
| character and a close bracket |
| .B ] |
| character. |
| The set |
| .I excludes |
| those characters if the first character after the open bracket is a |
| circumflex |
| .RB ( ^ ). |
| To include a close bracket in the set, make it the first character after |
| the open bracket or the circumflex; any other position will end the set. |
| The hyphen character |
| .B \- |
| is also special; when placed between two other characters, it adds all |
| intervening characters to the set. |
| To include a hyphen, make it the last |
| character before the final close bracket. |
| For instance, |
| .B [^]0\-9\-] |
| means |
| the set "everything except close bracket, zero through nine, and hyphen". |
| The string ends with the appearance of a character not in the (or, with a |
| circumflex, in) set or when the field width runs out. |
| .TP |
| .B p |
| Matches a pointer value (as printed by |
| .B %p |
| in |
| .BR printf (3); |
| the next pointer must be a pointer to a pointer to |
| .IR void . |
| .TP |
| .B n |
| Nothing is expected; instead, the number of characters consumed thus far |
| from the input is stored through the next pointer, which must be a pointer |
| to |
| .IR int . |
| This is |
| .I not |
| a conversion, although it can be suppressed with the |
| .B * |
| assignment-suppression character. |
| The C standard says: "Execution of a |
| .B %n |
| directive does not increment |
| the assignment count returned at the completion of execution" |
| but the Corrigendum seems to contradict this. |
| Probably it is wise |
| not to make any assumptions on the effect of |
| .B %n |
| conversions on the return value. |
| .SH "RETURN VALUE" |
| These functions return the number of input items |
| successfully matched and assigned, |
| which can be fewer than provided for, |
| or even zero in the event of an early matching failure. |
| |
| The value |
| .B EOF |
| is returned if the end of input is reached before either the first |
| successful conversion or a matching failure occurs. |
| .B EOF |
| is also returned if a read error occurs, |
| in which case the error indicator for the stream (see |
| .BR ferror (3)) |
| is set, and |
| .I errno |
| is set indicate the error. |
| .SH ERRORS |
| .TP |
| .B EAGAIN |
| The file descriptor underlying |
| .I stream |
| is marked nonblocking, and the read operation would block. |
| .TP |
| .B EBADF |
| The file descriptor underlying |
| .I stream |
| is invalid, or not open for reading. |
| .TP |
| .B EILSEQ |
| Input byte sequence does not form a valid character. |
| .TP |
| .B EINTR |
| The read operation was interrupted by a signal; see |
| .BR signal (7). |
| .TP |
| .B EINVAL |
| Not enough arguments; or |
| .I format |
| is NULL. |
| .TP |
| .B ENOMEM |
| Out of memory. |
| .TP |
| .B ERANGE |
| The result of an integer conversion would exceed the size |
| that can be stored in the corresponding integer type. |
| .SH "CONFORMING TO" |
| The functions |
| .BR fscanf (), |
| .BR scanf (), |
| and |
| .BR sscanf () |
| conform to C89 and C99 and POSIX.1-2001. |
| These standards do not specify the |
| .B ERANGE |
| error. |
| .PP |
| The |
| .B q |
| specifier is the 4.4BSD notation for |
| .IR "long long" , |
| while |
| .B ll |
| or the usage of |
| .B L |
| in integer conversions is the GNU notation. |
| .PP |
| The Linux version of these functions is based on the |
| .I GNU |
| .I libio |
| library. |
| Take a look at the |
| .I info |
| documentation of |
| .I GNU |
| .I libc (glibc-1.08) |
| for a more concise description. |
| .SH NOTES |
| The GNU C library supports a nonstandard extension that causes |
| the library to dynamically allocate a string of sufficient size |
| for input strings for the |
| .B %s |
| and |
| \fB%a[\fP\fIrange\fP\fB]\fP |
| conversion specifiers. |
| .\" This feature seems to be present at least as far back as glibc 2.0. |
| To make use of this feature, specify |
| .B a |
| as a length modifier (thus |
| .B %as |
| or |
| \fB%a[\fP\fIrange\fP\fB]\fP). |
| The caller must |
| .BR free (3) |
| the returned string, as in the following example: |
| .in +4n |
| .nf |
| |
| char *p; |
| int n; |
| |
| errno = 0; |
| n = scanf("%a[a-z]", &p); |
| if (n == 1) { |
| printf("read: %s\\n", p); |
| free(p); |
| } else if (errno != 0) { |
| perror("scanf"); |
| } else { |
| fprintf(stderr, "No matching characters\\n"); |
| } |
| .fi |
| .in |
| .PP |
| As shown in the above example, it is only necessary to call |
| .BR free (3) |
| if the |
| .BR scanf () |
| call successfully read a string. |
| .PP |
| The |
| .B a |
| modifier is not available if the program is compiled with |
| .I "gcc -std=c99" |
| or |
| .IR "gcc -D_ISOC99_SOURCE" |
| (unless |
| .B _GNU_SOURCE |
| is also specified), in which case the |
| .B a |
| is interpreted as a specifier for floating-point numbers (see above). |
| |
| Since version 2.7, glibc also provides the |
| .B m |
| modifier for the same purpose as the |
| .BR a |
| modifier. |
| The |
| .B m |
| modifier has the following advantages: |
| .IP * 2 |
| It may also be applied to |
| .B %c |
| conversion specifiers (e.g., |
| .BR %3mc ). |
| .IP * |
| It avoids ambiguity with respect to the |
| .B %a |
| floating-point conversion specifier (and is unaffected by |
| .IR "gcc -std=c99" |
| etc.) |
| .IP * |
| It is specified in the upcoming revision of the POSIX.1 standard. |
| .SH BUGS |
| All functions are fully C89 conformant, but provide the |
| additional specifiers |
| .B q |
| and |
| .B a |
| as well as an additional behavior of the |
| .B L |
| and |
| .B l |
| specifiers. |
| The latter may be considered to be a bug, as it changes the |
| behavior of specifiers defined in C89. |
| .PP |
| Some combinations of the type modifiers and conversion |
| specifiers defined by ANSI C do not make sense |
| (e.g., |
| .BR "%Ld" ). |
| While they may have a well-defined behavior on Linux, this need not |
| to be so on other architectures. |
| Therefore it usually is better to use |
| modifiers that are not defined by ANSI C at all, that is, use |
| .B q |
| instead of |
| .B L |
| in combination with |
| \fBd\fP, \fBi\fP, \fBo\fP, \fBu\fP, \fBx\fP, and \fBX\fP |
| conversions or |
| .BR ll . |
| .PP |
| The usage of |
| .B q |
| is not the same as on 4.4BSD, |
| as it may be used in float conversions equivalently to |
| .BR L . |
| .SH "SEE ALSO" |
| .BR getc (3), |
| .BR printf (3), |
| .BR setlocale (3), |
| .BR strtod (3), |
| .BR strtol (3), |
| .BR strtoul (3) |