On Mon, Jun 23, 2008 at 01:47:59PM +0200, Michael Kerrisk wrote:
> Right, here's another version.  Could you please have another read
> through, Stephane

Michael,

it looks good to me.

I suspect it wasn't your intention to leave
>            printf("n=%d, errno=%d\n", n, errno);
in though. That printf might set errno itself so that the next
check for errno wouldn't be valid.


> 
>    NOTES
>        The GNU C library supports a non-standard extension that causes
>        the library to dynamically allocate a string of sufficient size
>        for  input  strings  for  the  %s  and   %a[range]   conversion
>        specifiers.  To make use of this feature, specify a as a length
>        modifier (thus %as or %a[range]).  The caller must free(3)  the
>        returned string, as in the following example:
> 
>            char *p;
>            int n;
> 
>            errno = 0;
>            n = scanf("%a[a-z]", &p);
>            printf("n=%d, errno=%d\n", n, errno);
>            if (n == 1) {
>                printf("read: %s\n", p);
>                free(p);
>            } else if (errno != 0) {
>                perror("scanf");
>            } else {
>                fprintf(stderr, "No matching characters\n"):
>            }
> 
>        As  shown  in  the  above example, it is only necessary to call
>        free(3) if the scanf() call successfully read a string.
> 
>        The a modifier is not available if the program is compiled with
>        gcc  -std=c99  or  gcc  -D_ISOC99_SOURCE (unless _GNU_SOURCE is
>        also specified), in which case the a is interpreted as a speci-
>        fier for floating point numbers (see above).
> 
>        Since  version  2.7, glibc also provides the m modifier for the
>        same purpose as the a modifier.  The m modifier has the follow-
>        ing advantages:
> 
>        * It  may  also  be  applied to %c conversion specifiers (e.g.,
>          %3mc).
> 
>        * It avoids ambiguity with respect  to  the  %a  floating-point
>          conversion specifier (and is unaffected by gcc -std=c99 etc.)
> 
>        * It is specified in the upcoming revision of the POSIX.1 stan-
>          dard.

Cheers,
Stéphane



--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to