下面是我在eVC中读取汉字点阵信息的代码:
1 unsigned char chrpoint[16][2];
2 /* 获得区码与位码 */
3 int i=unsigned char(htext)-0xa0;
4 int j=unsigned char(ltext)-0xa0;
5 for(int m=0;m<16;m++)
6 for(int n=0;n<2;n++)
7 chrpoint[m][n]=0;
8 fseek(HZK,0,SEEK_SET);
9 fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET);
10 fread(chrpoint,32,1,HZK);
11 for(int y=0;y<16;y++)
12 {
13 pointArray[y][index]=TurnAroundByte(chrpoint[y][0]);
14 pointArray[y][index+1]=TurnAroundByte(chrpoint[y][1]);
15 }
在第10行中读取出来的点阵信息也就是chrpoint的内容全都不为0x00,可是到了第13、14行取其值的时候,chrpoint数组中的后一半的内容却全都变成了0x00。请问这是什么原因?请各位兄台帮帮忙,再搞不定,我的饭碗就保不住了!

解决方案 »

  1.   

    估计是在执行13、14时,内存溢出,破坏了charpoint,
    验证方法,把charpoint定义的大一些,看是否还变成0x00
      

  2.   

    index = 0是不是应加上?
      

  3.   

    不好意思,我没说清楚!
    这段程序并不是每个汉字的点阵信息都变成,而是某些汉字就会出现这种情况,但是很少数,目前会出现这种情况的汉字有:家,认,科,技,给,挥,弱,编,者,按,扩,抬,话,甚,格,批,投,缓,等!
    index是传过来的参数,是pointArray的列下标,这个绝对没错!
      

  4.   

    和楼主打开的文件没有任何关系,那个文件大约就是字库文件。1。检查fread.
    将 fread(chrpoint,32,1,HZK);
    改成
    int nCount=fread(chrpoint,sizeof(unsigned char),32,HZK);
    检查nCount是不是32.2. 检查TurnAroundByte()函数,看起来它好像是传值的。由于没有源程序,所以不能保证你不是使用的call-by-reference.