delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1998/06/23/17:57:15

From: cher AT ispras DOT ru (Alexander Chernov)
Subject: RE: scanf "%n" format specifier is not supported
23 Jun 1998 17:57:15 -0700 :
Message-ID: <Pine.GSO.3.96.980623154135.26282A-100000.cygnus.gnu-win32@sigma>
References: <001f01bd9e5b$e2ba13a0$fa173185 AT gbird0 DOT fu DOT is DOT saga-u DOT ac DOT jp>
Mime-Version: 1.0
To: GNU-Win32 <gnu-win32 AT cygnus DOT com>

On Tue, 23 Jun 1998, Colin Peters wrote:

> Date: Tue, 23 Jun 1998 13:03:31 +0900
> From: Colin Peters <colin AT fu DOT is DOT saga-u DOT ac DOT jp>
> To: Alexander Chernov <cher AT ispras DOT ru>
> Cc: GNU-Win32 <gnu-win32 AT cygnus DOT com>
> Subject: RE: scanf "%n" format specifier is not supported
> 
> 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);

Yes.

> >  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);

Ok, but atleast on Linux, HPUX and Solaris sscanf works as described
above,
ie "r = sscanf("32", "%d %n", &v, &n);" sets r to 1, v to 32 and n to 2.
I looked at my C book, and It says nothing on this topic, though...

> 
> 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.

I've replaced all sscanf with strtol, which provides better diagnostics.

> 
> 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