Subject: RE: scanf "%n" format specifier is not supported
From: [email-masked] (Colin Peters)

23 Jun 1998 10:11:40 -0700
Message-ID: <[email-masked]>
Mime-Version: 1.0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
To: "Alexander Chernov" <[email-masked]>
Cc: "GNU-Win32" <[email-masked]>

Alexander Chernov <[email-masked]> wrote:
>This looks like a missing feature: "%n" format specifier in sscanf
>is not supported. For example, the following piece of code
>left variable n value as 0 instead of 2. According to my textbooks
>ANSI C specifies %n specifier.
>
>#include <stdio.h>
>#include <string.h>
>
>  int
>main()
>{
>  int v = 0, n = 0, r = 0;
>
>  r = sscanf("32", "%d %n", &v, &n);
>  printf("v = %d\nn = %d\nr = %d\n", v, n, d);

should be: printf("v = %d\nn = %d\nr = %d\n", v, n, r);
>  return 0;
>}

Aside from the typo above the reason the code doesn't work is that sscanf
never gets as far as the %n. It stops when it reaches the end of the string
"32" while looking for a whitespace to match the space between %d and %n.
Try adding a space to the end of "32" like this:

r = sscanf("32 ", "%d %n", &v, &n);

And, with Mingw32 at least, you'll get:
v = 32
n = 3
r = 1

Alternatively you could change the format string to "%d%n" and n will be set
to 2.

Hope this helps,
Colin.

-- Colin Peters - colin at fu.is.saga-u.ac.jp
-- Saga Univ. Dept. of Information Science
-- http://www.geocities.com/Tokyo/Towers/6162/index.html
-- http://www.fu.is.saga-u.ac.jp/~colin/index.html

-
For help on using this list (especially unsubscribing), send a message to
"[email-masked]" with one line of text: "help".