遊びで作ってみた以下のコードが期待したとおりの動作をしないのですが
なにが原因なのか教えていただけると助かります。

gccとvcでやってみたのですがどちらも期待どおりの動作をしませんでした
// printf("%s\n", (itostr(10)).str);
itostrの引数を定数にするとvcでは期待した結果が得られました

#include <stdio.h>

typedef struct {
char str[20];
} ITOSTR ;

ITOSTR itostr(int i) {
ITOSTR its;
sprintf(its.str, "%d", i);
return its;
}

int main()
{
int i;
for (i = 0; i < 10; i++)
printf("%s\n", (itostr(i)).str);
return 0;
}