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.