读取wav文件时文件出错,该如何解决

读取wav文件时文件出错
void main()
 {
  int i;
  long size;
  FILE *fp; 
// char b = 0;
// int c = b;
// cout<<b;
// cout<<c;
  fp = fopen("A001.wav","rb");
  fseek(fp,40,SEEK_SET);
  fread(&size,sizeof(long),1,fp);
  fstream outfile;
  outfile.open("luo.txt",ios::out);
  long datalen = size/2;
  short *a = new short[datalen]; 

  fseek(fp, 44, SEEK_SET);
  for(i=0;i<size;i++)
  { 
fread(&a[i], sizeof(short), 1, fp);
// outfile<<a[i]<<" ";
cout<<a[i]<<" ";
  } 
// fread((char *)a, sizeof(char), size, fp);
 
  
  
 
 delete []a;
 fclose(fp);
 outfile.close();
}
代码如上,以“r”方式读文件出错了,以“rb”方式就是正确的,为什么呢,还有就是a[0]正确数据是5时(rb方式),而错误的结果为什么是-12851(r)方式,我想知道怎么由变成了-12851,就是以r方式读时这个数是怎么得出来,希望有智者点拨,谢谢

------解决方案--------------------
rb是以二进制读取,这样不会理会特殊字符的问题,r的话就不行了,比如遇到回车换行符等,就要出问题了