靶子代码:
#include<stdio.h>
void main(){
FILE *fp;
short a,b;
fp=fopen("hello.txt","r");
while(!feof(fp)){
fscanf(fp,"%d %d",&a,&b);
printf("%d %d\n",a,b);
}
}
运行后回报污染变量a和变量b。
我先开始怀疑是不是读了文件的最后一行导致的。
于是加了下面的判断:
if(feof(fp))
break;
在while循环里面,while循环修改如下:
while(1){
fscanf(fp,"%d %d",&a,&b);
if (feof(fp))
break;
printf("%d %d\n",a,b);
}
但是还是报出错,污染变量a,b。后来发现fscanf对于a,b的空间是int型的。于是修改以上代码为:
#include<stdio.h>
void main(){
FILE *fp;
int a,b;
fp=fopen("hello.txt","r");
while(1){
fscanf(fp,"%d %d",&a,&b);
if (feof(fp))
break;
printf("%d %d\n",a,b);
}
}
运行正常,不报异常和污染参数a,b。原来这里污染a,b其实就是操作过程中有溢出,fscanf奖a,b空间放大int,从而导致了影响周围内存空间。