70,037
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
extern int count = 0;
int main()
{
char a[4][4];
for(volatile int i=0; i<5; i++)
{
printf("i = %d, count = %d\n", i, count);
sprintf(a[count], "%d", 123);
//printf("Yes:a[3] = %s\n", a[3]);
printf("HERE: i = %d, count = %d\n", i, count);
printf("a[%d] = %s\n", count, a[count]);
count++;
}
return 0;
}
i的声明加volatile,拒绝编译器的优化。
#include <stdio.h>
extern int count = 0;
int main()
{
char a[4][4];
for(int i=0; i<5; i++)
{
printf("i = %d, count = %d\n", i, count);
sprintf(a[count], "1234");
//printf("Yes:a[3] = %s\n", a[3]);
printf("HERE: i = %d, count = %d\n", i, count);
printf("a[%d] = %s\n", count, a[count]);
count++;
}
return 0;
}
结果为:
i = 0, count = 0
HERE: i = 0, count = 0
a[0] = 1234
i = 1, count = 1
HERE: i = 1, count = 1
a[1] = 1234
i = 2, count = 2
HERE: i = 2, count = 2
a[2] = 1234
i = 3, count = 3
HERE: i = 0, count = 3
a[3] = 1234
i = 1, count = 4
HERE: i = 875770417, count = 4
a[4] = 1234
由最后的 i = 875770417可以看得出,这绝对坑啊!我猜是内存管理的原因。
最后,希望回答问题的负责任!!!