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: References: <001f01bd9e5b$e2ba13a0$fa173185 AT gbird0 DOT fu DOT is DOT saga-u DOT ac DOT jp> Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII To: GNU-Win32 On Tue, 23 Jun 1998, Colin Peters wrote: > Date: Tue, 23 Jun 1998 13:03:31 +0900 > From: Colin Peters > To: Alexander Chernov > Cc: GNU-Win32 > Subject: RE: scanf "%n" format specifier is not supported > > Alexander Chernov 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 > >#include > > > > 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".