Mail Archives: cygwin/1998/06/23/17:57:15
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 -