c语言 fscanf调用报污染变量异常问题解决
作者:互联网
靶子代码:
#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,从而导致了影响周围内存空间。
标签:fp,调用,变量,fscanf,int,污染,while,feof 来源: https://www.cnblogs.com/happyhorse72/p/14832394.html