delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/06/23/10:11:40

From: colin AT fu DOT is DOT saga-u DOT ac DOT jp (Colin Peters)
Subject: RE: scanf "%n" format specifier is not supported
23 Jun 1998 10:11:40 -0700 :
Message-ID: <001f01bd9e5b$e2ba13a0$fa173185.cygnus.gnu-win32@gbird0.fu.is.saga-u.ac.jp>
Mime-Version: 1.0
To: "Alexander Chernov" <cher AT ispras DOT ru>
Cc: "GNU-Win32" <gnu-win32 AT cygnus DOT com>

Alexander Chernov <cher AT ispras DOT ru> 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
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019