%n in fscanf

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.

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
--
To unsubscribe from this list: send the line "unsubscribe linux-man" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux