Why?
For the same reason that this
#include <stdio.h>
int main()
{
struct foo {
char * a;
char * b;
int y;
};
struct foo f = {
"Hello", "World", 1337
};
printf("%s\n%s\n%d\n", f);
}
can* output
Hello
World
1337
———-
You're passing the struct to printf, hence the whole struct is copied and placed onto the stack. In total 3 elements will be placed on the stack - n being the third one. printf uses also two (as per format string) - hence n will be "ignored".
* consult your ABI manuals