On 31 Oct, 09:42, john <j...@no.spam> wrote:
> 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.