char c,s[4];
int i=1000;
while(1)
{
i+=10;
sprintf(s,"%d",i);
printf("%s",s);
}
当我编译上面的代码时,我得到如下输出:
1010 778 788 798 808 818...
任何人都可以解释为什么这个kolavery D ??
答案 0 :(得分:5)
sprintf()
将五个字符(四位数和一个NUL)写入四字符缓冲区。因此,您有一个缓冲区溢出,并且代码的行为未定义。
如果您对778
的来源感到好奇,请考虑以下事项:(1010 & ~0xff) + 10 = 778
。
不能强调你不能依赖于此,因为即使对编译器选项进行的最小改动(更不用说对工具链进行更大的更改)也可能使undefined behaviour以其他方式表现出来
答案 1 :(得分:1)
您的数组s [4]不足以打印4位整数,因此会覆盖其他局部变量,从而破坏“i”。