Connecting Tech Pros Worldwide Help | Site Map

printf %n question

  #1  
Old October 31st, 2007, 10:45 AM
john
Guest
 
Posts: n/a
The code:

#include <cstdio>


int main()
{
using namespace std;

int i;

printf("%ld\n%n", 1, &i);

printf("==>%d\n", i);

printf("%ld\n%n", 123456, &i);

printf("==>%d\n", i);

}

in my system produces:

[john@localhost src]$ ./foobar-cpp
1
==>2
123456
==>7

[john@localhost src]$


I expected:

"[john@localhost src]$ ./foobar-cpp
1
==>1
123456
==>6
[john@localhost src]$ "



It looks like it increments the value written to i with 1 more, than it
should. Is this a bug of my compiler, or am I wrong?
  #2  
Old October 31st, 2007, 11:05 AM
tragomaskhalos
Guest
 
Posts: n/a

re: printf %n question


On 31 Oct, 09:42, john <j...@no.spamwrote:
Quote:
The code:
>
#include <cstdio>
>
int main()
{
using namespace std;
int i;
printf("%ld\n%n", 1, &i);
printf("==>%d\n", i);
printf("%ld\n%n", 123456, &i);
printf("==>%d\n", i);
>
}
>
in my system produces:
>
[john@localhost src]$ ./foobar-cpp
1
==>2
123456
==>7
>
[john@localhost src]$
>
I expected:
>
"[john@localhost src]$ ./foobar-cpp
1
==>1
123456
==>6
[john@localhost src]$ "
>
It looks like it increments the value written to i with 1 more, than it
should. Is this a bug of my compiler, or am I wrong?
Interesting - have never come across %n before:
Googling unearths (in http://www.cplusplus.com) :
"Nothing printed. The argument must be a pointer to a signed int,
where the number of characters written so far is stored."

So your sample is behaving correctly:
"1" + "\n" = 2 characters
"123456" + "\n" = 7 characters
as reported.



  #3  
Old November 1st, 2007, 03:05 AM
Jack Klein
Guest
 
Posts: n/a

re: printf %n question


On Wed, 31 Oct 2007 11:42:36 +0200, john <john@no.spamwrote in
comp.lang.c++:
Quote:
The code:
>
#include <cstdio>
>
>
int main()
{
using namespace std;
>
int i;
>
printf("%ld\n%n", 1, &i);
>
printf("==>%d\n", i);
>
printf("%ld\n%n", 123456, &i);
>
printf("==>%d\n", i);
>
}
>
in my system produces:
>
[john@localhost src]$ ./foobar-cpp
1
==>2
123456
==>7
>
[john@localhost src]$
>
>
I expected:
>
"[john@localhost src]$ ./foobar-cpp
1
==>1
123456
==>6
[john@localhost src]$ "
>
>
>
It looks like it increments the value written to i with 1 more, than it
should. Is this a bug of my compiler, or am I wrong?
You are wrong. You put the %n after the newline character in the
format string, so it is counted as well. Try putting the %n before
the \n.

--
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://c-faq.com/
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++
http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html
  #4  
Old November 1st, 2007, 03:55 PM
Chip Coldwell
Guest
 
Posts: n/a

re: printf %n question


tragomaskhalos <dave.du.vergier@logicacmg.comwrites:
Quote:
On 31 Oct, 09:42, john <j...@no.spamwrote:
Quote:
>The code:
>>
>#include <cstdio>
>>
>int main()
>{
> using namespace std;
> int i;
> printf("%ld\n%n", 1, &i);
> printf("==>%d\n", i);
> printf("%ld\n%n", 123456, &i);
> printf("==>%d\n", i);
>>
>}
>>
>in my system produces:
>>
>[john@localhost src]$ ./foobar-cpp
>1
>==>2
>123456
>==>7
>>
>[john@localhost src]$
>>
>I expected:
>>
>"[john@localhost src]$ ./foobar-cpp
>1
>==>1
>123456
>==>6
>[john@localhost src]$ "
>>
>It looks like it increments the value written to i with 1 more, than it
>should. Is this a bug of my compiler, or am I wrong?
>
Interesting - have never come across %n before:
Very useful for IOCCC entries.

Chip

--
Charles M. "Chip" Coldwell
"Turn on, log in, tune out"
Somerville, Massachusetts, New England
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Printf Question Mandragon03@gmail.com answers 4 April 18th, 2007 11:05 PM
Printf question. praeiji answers 15 January 2nd, 2006 04:35 AM
another printf question!! drM answers 12 November 14th, 2005 06:40 PM
Printf question anonymous@coolgroups.com answers 11 November 14th, 2005 02:05 AM
printf question Wenjie answers 9 November 13th, 2005 03:34 AM