用函数IsDBCSLeadByte()可以判断该字符是否为双字节字符的第一个字节。

解决方案 »

  1.   

    char buffer[10241];
    fread(buffer,10240);
    if(buffer[10239]>128)
        fread(buffer[10240],1);
    不知这样行不行,好久没有使用标准C语言了。
      

  2.   


    #include <stdio.h>#include <string.h>#define MAX_BUFFER (1024*10)
    int main(int argc, char* argv[])
    {
    FILE *f;
    char szFileName[]="your filename.xxx";
    f=fopen(szFileName,"r+");
    if(NULL==f) {
    printf("Error to open file \"%s\"",szFileName);
    getchar();
    return 0;
    }
    char sz[MAX_BUFFER+3];
    char *p;
    int nSize=fread(sz,sizeof(char),MAX_BUFFER,f);
    if(nSize==MAX_BUFFER)//判断最后一个字符是否为多字节,
    {
    *p=sz[MAX_BUFFER-1];
    int cb;
    while(0xf0==(char)(*p & 0xf0))//有些字符有二到三个字节组成
    {
    p++;
    cb=fread(p,sizeof(char),1,f);
    if(cb==0) break;
    nSize++;
    }
    *p=0;
    }
    printf("Bytes Readed = %ld",nSize);
    fclose(f);
    getchar();
    return 0;
    }
      

  3.   

    好象有点问题,*p = sz[MAX_BUFFER-1];这句前应该对P指针分配地址的,不分配好象不行,另外,不知道什么原因sz[MAX_BUFFER-1]值取不出来呀!
    另,0xf0应该是240,是表示什么意思?
      

  4.   

    我写错了,
    p=(char *)&sz[MAX_BUFFER-1];
    0XF0应改为0x80
      

  5.   

    哦,对!那好象while循环总是进不去呀!
      

  6.   

    while循环可以进去(只要*p>128),但别用while循环了,(有错误)
    用下面的语句
    if(0x80==(char)(*p & 0x80)) 
    {
       cb=fread(p,sizeof(char),1,f);
       if(cb!=0) nSize++;}
      

  7.   

    好象是
    if(*(char *)p&0x80)
    {
       ....
    }//以下是我新加入的
    fread(sz,sizeof(char),nSize,f);
    printf("/n/n");
    printf(sz);结果在前面一小段出现乱码,但最后的截断区是实现了正确截断,不出现乱码了,请问这是什么原因,你可以用个TXT文件测试一下吗?谢谢。
      

  8.   

    fread中不应传递sz, 否则新读入的字符读入了sz[0],前一小段有可能会出现乱码.
    用char *p=*sz[MAX_BUFFER]得到指向最后一个字符的指针,
    fread(p,sizeof(char),nSize,f);才能将新读入的字符放入正确的位置.
      

  9.   

    哦,谢谢!另外,下面的这个条件就是不能进入
    if(0x80==(char)(*p & 0x80)) 
    {
      cb=fread(p,sizeof(char),1,f);
      if(cb!=0) nSize++;} 
    而这个
    if(*(char *)p&0x80)
    {
      ....
    }
    条件就每次都能实现。这是什么原因?还有,繁体字是不是可能存在由三个字符组成?