printf %n question 
October 31st, 2007, 10:45 AM
| | | |
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? | 
October 31st, 2007, 11:05 AM
| | | | 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. | 
November 1st, 2007, 03:05 AM
| | | | 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 | 
November 1st, 2007, 03:55 PM
| | | | 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 |  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 225,689 network members.
|