本帖最后由 VisualEleven 于 2010-12-22 11:50:00 编辑

解决方案 »

  1.   

    你Debug下call stack看看运行到哪个函数抛出异常的
      

  2.   

    由于QP的长度不短于源码,可以就地解码
    /*
    输入:QP编码字串
    返回:就地解码后的输入字串的指针
    */
    char * QPDecode(char *psz)
    {
    char *b,*e;
    b=psz;
    e=b;
    BOOL bHead=TRUE;
    while(e[0] != '\0')
    {
    if(bHead)
    {
    if(e[0] != '=' || e[1] != '?') break;
    e+=2;
    e=stristr(e,"?q?");
    if(e == NULL) break;
    e+=3;
    bHead=FALSE;
    }
    if(e[0] == '=')
    {
    b[0] = (e[1]>='A'?((e[1] & 0xDF)-'A')+10 : (e[1]-'0'));
    b[0] *= 16;
    b[0] += (e[2]>='A' ? ((e[2] & 0xDF)-'A')+10 : (e[2]-'0'));
    b++;
    e+=3;
    continue;
    }
    if(e[0] == '?')
    {
    if(e[1] == '=')
    {
    e+=2;
    while(e[0]=='\r' || e[0]=='\n' || e[0]==' ' || e[0]=='\t') e++;
    bHead = TRUE;
    }
    continue;
    }
    if(e[0]=='\r' || e[0]=='\n' || e[0]=='\t')
    {
    e++;
    continue;
    } b[0]=e[0];
    b++;
    e++;
    }
    b[0]='\0'; return psz;}
      

  3.   

    谢谢ok1234567,但这个e[0]e[1]之类是不是不能这样写,运行不能解码,我试着改掉,用下标处理,但还是不能解码
      

  4.   

    问题好像在这句
    sscanf(pSrc,   "=%02X",   pDst); 
    sscanf函数在使用时容易导致堆栈混乱,得找个办法把这条语句替换掉