关于字符数组的越界问题
#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
int x = 3;
char pa[]="/usr/";
printf("%d %d\n", &x, pa);
printf("%d\n",x);
strcat(pa,"abcdeabcdeabcdeabcdeabcde");
printf("%d\n",x);
getch();
return 0;
}
在vc下运行的结果如下:
1310588 1310580
3
1650550116
很明显,通过观察就能知道pa这个字符数组已经越界了。可是在VC中可以编译通过,而且输出strcat后的结果来。很奇怪,既然都有问题了,为什么还会输出结果?然后用什么样的方法来判断pa已经越界了(因为程序照常运行没问题,编译的时候无法告知越界的错误)?
我用的方法是:定义了个变量x,运行后,发现前后对x输出的结果会不一样。这样是不是就是说已经证明了该数组越界了,把x所在位置的内容给覆盖了,导致第二个printf对x输出的是一个随机的值。不知道我的方法是否可行?不知道还有别的方法没?
请指教。谢谢!