From: "Michael Kerrisk (man-pages)" <mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Joern Heissler
<contact-pbvhy9/vjlfAiHgwPnP32rNAH6kLmebB@public.gmane.org>
Cc: mtk.manpages-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: %n in fscanf
Date: Mon, 04 May 2015 15:13:15 +0200 [thread overview]
Message-ID: <5547706B.2040905@gmail.com> (raw)
In-Reply-To: <4B94E1C8.8010100-pbvhy9/vjlfAiHgwPnP32rNAH6kLmebB@public.gmane.org>
Joern,
On 03/08/2010 12:38 PM, Joern Heissler wrote:
> The fscanf manpage contains this:
>
> 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 int. This is not a conversion, although it
> can be suppressed with the * assignment-suppression character. The C standard says:
> "Execution of a %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 %n conversions on the return value.
>
>
> I wondered about this and looked at c89, c99+tc3, c1x, k&r2, posix manpages; all say that %n does *not*
> increase the counter. %*n causes undefined behaviour according to c99+tc3.
> I wasn't able to find proof that any Corrigendum says otherwise.
> Therefore I think it's safe to say that you can indeed make the assumption that %n does not affect the
> return value.
Long after the fact, I've applied this patch.
Cheers,
Michael
> Suggested patch:
> --- scanf.3.orig 2010-03-08 12:21:59.000000000 +0100
> +++ scanf.3 2010-03-08 12:29:59.000000000 +0100
> @@ -506,18 +506,15 @@
> .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.
> +a conversion and does
> +.I not
> +increase the count returned by the function.
> +The assignment can be suppressed with the
> +.B *
> +assignment-suppression character, but the effect on the
> +return value is undefined. Therefore
> +.B %*n
> +conversions should not be used.
> .SH "RETURN VALUE"
> These functions return the number of input items
> successfully matched and assigned,
>
>
> Cheers,
> Jörn Heissler
>
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
prev parent reply other threads:[~2015-05-04 13:13 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-08 11:38 %n in fscanf Joern Heissler
[not found] ` <4B94E1C8.8010100-pbvhy9/vjlfAiHgwPnP32rNAH6kLmebB@public.gmane.org>
2015-05-04 13:13 ` Michael Kerrisk (man-pages) [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5547706B.2040905@gmail.com \
--to=mtk.manpages-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=contact-pbvhy9/vjlfAiHgwPnP32rNAH6kLmebB@public.gmane.org \
--cc=linux-man-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.