其他分享
首页 > 其他分享> > c语言 fscanf调用报污染变量异常问题解决

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