Hi all,
As we know, gcc would give us an error message when we do this:
`struct _test a; char *s = a;`;
However, when we use this in printf/fprintf, it gets wired.
```c
#include
struct _test {
char name[256];
};
struct _test tests[100];
int main(int argc, char *argv[])
{
memcpy(tests[0].name, "hello0", 6);
memcpy(tests[1].name, "hello1", 6);
memcpy(tests[2].name, "hello2", 6);
for (int i = 0; i < 3; i++) {
#if 1
/* output hello1 */
printf("%s\n", tests[i]);
/* output looks to be all right */
printf("%d %s\n", i, tests[i]);
printf("%d %d %s\n", i, i, tests[i]);
#else
printf("%s\n", tests[i], "hello gcc");
#endif
}
return 0;
}
```
Gcc just give a warning message, and copy the structure to stack,
some registers will be reset(%rsi...), then ignore the argument `tests[i]`,
which means `#else` will output `hello gcc`.
Should gcc give it an error to prevent a structure from converting to
char* in functions printf/fprintf?
Best regards,